Ubuntu 에 서 는 Android 시스템 에 내 장 된 C 실행 가능 프로그램 테스트 Linux 커 널 드라이버 를 구현 합 니 다.
1.Ubuntu Android 시스템 에서 Linux 커 널 드라이버 구현 방법 작성문 을 참조 하여 Linux 드라이버 를 준비 합 니 다.Android 시 뮬 레이 터 를 사용 하여 이 Linux 드라이버 를 포함 하 는 커 널 파일 을 불 러 오고 adb 셸 명령 연결 에 시 뮬 레이 션 을 사용 하여/dev 디 렉 터 리 에 장치 파일 hello 가 존재 하 는 지 검증 합 니 다.
2.Android 소스 코드 프로젝트 의 external 디 렉 터 리 에 들 어가 hello 디 렉 터 리 를 만 듭 니 다.
USER-NAME@MACHINE-NAME:~/Android$ cd external
USER-NAME@MACHINE-NAME:~/Android/external$ mkdir hello
3.hello 디 렉 터 리 에 hello.c 파일 을 새로 만 듭 니 다.
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#define DEVICE_NAME "/dev/hello"
int main(int argc, char** argv)
{
int fd = -1;
int val = 0;
fd = open(DEVICE_NAME, O_RDWR);
if(fd == -1) {
printf("Failed to open device %s.
", DEVICE_NAME);
return -1;
}
printf("Read original value:
");
read(fd, &val, sizeof(val));
printf("%d.
", val);
val = 5;
printf("Write value %d to %s.
", val, DEVICE_NAME);
write(fd, &val, sizeof(val));
printf("Read the value again:
");
read(fd, &val, sizeof(val));
printf("%d.
", val);
close(fd);
return 0;
이 프로그램의 역할 에 서 는/dev/hello 파일 을 열 고/dev/hello 파일 의 값 을 읽 은 다음 에 값 5 를/dev/hello 에 기록 하고 마지막 으로/dev/hello 파일 의 값 을 다시 읽 어서 우리 가 방금 쓴 값 5 인지 확인 합 니 다./dev/hello 파일 에서 읽 고 쓴 값 은 실제 적 으로 우리 가상 하드웨어 의 레지스터 val 의 값 입 니 다.4.hello 디 렉 터 리 에 Android.mk 파일 을 새로 만 듭 니 다.
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := hello
LOCAL_SRC_FILES := $(call all-subdir-c-files)
include $(BUILD_EXECUTABLE)
주의:BUILDEXECUTABLE 는 우리 가 컴 파일 해 야 할 것 은 실행 가능 한 프로그램 이 라 고 밝 혔 다.
5.Android 소스 코드 의 모듈 을 따로 컴 파일 하 는 방법 을 참조 하여 mmm 명령 으로 컴 파일 합 니 다.
USER-NAME@MACHINE-NAME:~/Android$ mmm ./external/hello
컴 파일 에 성공 하면 out/target/produt/gerneric/system/bin 디 렉 터 리 에서 실행 가능 한 파일 hello 를 볼 수 있 습 니 다.
6.안 드 로 이 드 시스템 파일 system.img 을 다시 포장 합 니 다.
USER-NAME@MACHINE-NAME:~/Android$ make snod
이렇게 해서 다시 포장 한 system.img 파일 은 방금 컴 파일 한 hello 실행 가능 한 파일 을 포함 합 니 다.
7.시 뮬 레이 터 를 실행 하고/system/bin/hello 실행 가능 한 프로그램 을 사용 하여 리 눅 스 커 널 드라이버 에 접근 합 니 다.
USER-NAME@MACHINE-NAME:~/Android$ emulator -kernel ./kernel/common/arch/arm/boot/zImage &
USER-NAME@MACHINE-NAME:~/Android$ adb shell
root@android:/ # cd system/bin
root@android:/system/bin # ./hello
Read the original value:
0.
Write value 5 to /dev/hello.
Read the value again:
5.
이 결 과 를 보고 우리 가 작성 한 C 실행 가능 프로그램 이 우리 가 작성 한 Linux 커 널 드라이버 에 접근 할 수 있다 고 말 합 니 다.
C 언어 로 작 성 된 실행 가능 한 프로그램 을 사용 하여 리 눅 스 커 널 드라이버 를 방문 하 는 방법 을 소개 하 였 습 니 다.독자 들 은 안 드 로 이 드 의 Application Frameworks 에서 자바 인 터 페 이 스 를 제공 하여 리 눅 스 커 널 드라이버 에 접근 할 수 있 습 니까?네,다음 몇 편의 글 에서 우 리 는 안 드 로 이 드 의 Application Frameworks 에서 자바 인 터 페 이 스 를 추가 하여 리 눅 스 커 널 드라이버 를 방문 하 는 방법 을 소개 할 것 입 니 다.기대 하 시기 바 랍 니 다.
후속 으로 이 부분 에 대한 자 료 를 계속 정리 하 겠 습 니 다.여러분 이 본 사 이 트 를 지지 해 주 셔 서 감사합니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
PowerShell 기반 Ubuntu 시스템 사용 상세 정보본고는 주로 Ubuntu 16.04 LTS에 PowerShell을 설치하고 사용하는 방법을 소개한다.PowerShell Core는 마이크로소프트가 내놓은 크로스 플랫폼(Windows, Linux, macOS) 자동화...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.