분류 전체보기 268

Device Tree 주소 지정 방법

디바이스의 주소를 디바이스 트리에 명시하기 위해 정해진 속성엔 3가지가 있다. 1) #address-cells (부모노드에서 지정)2) #size-cells (부모노드에서 지정)3) reg (자식노드에서 지정)이 속성들은 서로 연관관계를 가지고 있다. ​​"#address-cells"속성과 "#size-cells"속성은 reg속성 데이터에 대한 갯수 규칙을 지정한다. -> 몇개의 길이를 지정할 것인가 ? #size-cells-> 몇개의 주소를 지정할 것인가 ? #address-cells​​​reg속성은 다음과 같은 형식을 가진다.reg = 1 길이1 [주소2 길이2] [주소3 길이3] ... [주소n 길이n] >*주소와 길이는 하나의 묶음이 된다. - 보드의 길이를 제어하기 위해 하나의 주소일수도 있고 ..

repo 명령어 정리

repo 명령어 정리   1.  REPO  INIT$ repo init -u [URL] [OPTIONS]현재 디렉터리에 .repo 디렉터리를 생성하고 그 안에 URL로부터 다운 받은 manifest.xml을 두고 이 파일이 실제 .repo/manifest/ 디렉터리에 있는 manifest file을 symbolic link로 지정한다. ​    2.  REPO  SYNC$ repo sync [PROJECT_LIST]project_list를 넣지 않으면 모든 repository를 sync한다. 첫 repo sync시에는 $git remote update와 같은 동작을 하고 ,그 후의 repo sync 시에는 $git rebase origin/BRANCH와 같은 동작을 한다.  [OPTION]  -d : t..

patch 명령어와 옵션

patch [option]    1.  옵션 -p[NUM] : 패치 파일에 명시되어있는 '패치할 파일의 위치'를 제대로 찾아주기 위한 "patch에서 제거할 prefix의 개수"​예를 들어보자. patch file path a/arch/x86/mm/fault.c-p0 : a/arch/x86/mm/fault.c-p1 : arch/x86/mm/fault.c-p2 : x86/mm/fault.c-p3 : mm/fault.c-p4 : fault.c​※ patch 결과를 미리 확인하는 옵션 patch --dry-run -p1 ~.diff​​   2.  patch 후, 출력 메시지​  - 패치가 성공적으로 이루어 졌을 때 :Hunk #1 Succeeded at 1 with fuzz 2  - 패치에 실패했을 때 :H..

DSI / CSI

1.  DSI / CSI 란?  DSI (Display Serial Interface) : AP(호스트)와 Display Module 사이의 고속 시리얼 인터페이스를 정의한 표준  CSI (Camera Serial interface)는 AP와 카메라를 연결하는 인터페이스에 관한 표준​ DSI (Display Serial Interface)는 디스플레이를 위한 규격이다. MIPI 물리 계층인 D-PHY를 사용하며, MIPI Display Command Set(MIPI DCS)를 사용한다.     2.  MIPI DSI / CSI   2.1  MIPI DSI & CSI 시스템 구성도     2.2  MIPI Physical Layers MIPI에서는 30개가 넘는 사양서를 정의하고 있는데, 그 중에 물리 계..

안드로이드 포팅 : AOSP 빌드 시스템

1.  안드로이드 포팅: AOSP 빌드 시스템 안드로이드 빌드 시스템의 설정방식은 안드로이드 셸 환경에서 envsetup.sh와 lunch로 동적으로 생성하거나, Buildspec.mk 파일로 미리 정의해둔 변수들을 활용할 수 있다. 또한 빌드 시스템은 소스파일과 같은위치에 객체파일 등의 중간 출력을 생성하지 않고, 모든 생성물은 out/ 디렉터리에 저장한다.   1.1  Android Build System​Envsetup.sh와 lunch는 명령을 실행한 셀에서 빌드할 땐 두 명령을 수행해야한다. 위 그림에서 묘사한대로 빌드 시스템 입장에서 타당한 진입점을 /build/core/ 디렉터리의 main.mk 파일이다. 이 파일은 최상의 Makefile을 호출한다.      1.2  Build Target..

Android OS 2024.11.07

Linux Kernel Image Header - ARM64

1.  Linux Kernel Image Header - ARM64   1.1  커널 이미지 헤더의 사용배경​ 리눅스 커널이 빌드 된 후, 커널 이미지의 헤더에 대해서 알아보도록 한다.임베디드 환경에서(통상 ARM Architecture),리눅스 커널과 같은 운영체제는 메모리에 로드가 된 후 실행된다. 그렇다면 여기서!, 드는 질문 2가지?!메모리에 적재시켜주는데... 메모리 몇 번지에 로드시켜야 하는가?커널 이미지는 누가 메모리에 로드시켜 주는가? Ⅰ. 메모리에 적재시, 메모리 몇번지에 로드시켜야 할까?  딱히 어느 메모리에 로드웨어야 한다 이런것은 없다.  리눅스 커널은 PIC(Position Independent Code)라고 하여, 메모리 어디에 올려도 스스로 원하는 메모리 주소로 Copy해서 동..

Ubuntu에서 NDK 설치, 설정, 실행해보기

1.  Ubuntu에서 NDK 설치, 설정, 실행해보기   1.1  NDK  install1) NDK 를 다운로드 받는다. 2) .bashrc 에서 ndk 경로를 설정한다. 3) rc재실행 후 확인​​​  1.2  NDK  Build 1) ndk디렉터리 밑에 jni 디렉터리 생성  2) jni 디렉터리 안에 컴파일 할 c 파일과 Android.mk 파일 생성 - ​안드로이드 mk 파일 내용 추가 LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_CFLAGS += -fPIE -pieLOCAL_MODULE := user_processLOCAL_SRC_FILES := user_process.cinclude $(BUILD_EXECUTABLE) 3) Ndk 빌드  ..

Android OS 2024.11.07

Linux Module

1.  Linux Module   1.1  리눅스 모듈이란​ 커널에서 작업해야하는 기능이 있는데 이를 추가하기 위해서는 커널을 수정해서 재컴파일해야한다. 하지만 매번 재컴파일하기에는 번거로우므로, 리눅스 등의 운영체제에서는 모듈이라는 기능을 제공하여 특정 커널의 기능을 사용하고자 할 때 실시간(동적)으로 추가할 수 있게 하고 있다.    1.2  USB 드라이버 예시 USB 드라이버를 생각해보자. USB를 연결하면, 장치가 추가되었기 떄문에 이를 처리하기 위해 커널은 처리를 하게 된다. 하지만 커널이 각 벤더사의 모든 USB드라이버를 설치해둘 수 없으니, USB 드라이버를 통해 커널에 특정 기능을 추가하여 처리할 수 있도록 한다. 만약 특정 기능을 추가하지 못한다면 USB를 꽂기 위해 USB 드라이버의 ..