Embedded : : Linux 48

Hot Plug / Cold Plug

Hot Plug & Cold Plug 리눅스에서는 동작 중에 필요한 디바이스 노트 파일을 "/dev" 디렉터리에 미리 정의한다.따라서 application은 별도의 절차를 거치지 않고도 미리 정의된 디바이스 노드 파일을 통해 디바이스 드라이버에 접근한다. 이 "/dev" 디렉터리는 시스템 운용 중 누군가 디바이스 노드 파일을 생성해줘야하는데 이러한 역할을 init process가 담당한다. ​inti process는 두가지 방법으로 디바이스 노드 파일을 생성한다. 첫번째 방법, 미리 정의된 디바이스 정보를 바탕으로 init 프로세스가 실행될 때 일괄적으로 노드파일을 생성하는 방법 두번째 방법, 시스템 동작 중 USB 포트에 장치가 삽입될때 이에 대한 이벤트 처리로 init process가 해당 장치의 디..

Embedded : : Linux 2024.11.12

PCIe Bus

PCIe BusPcie는 bus 구조로 이어져 있는데 시스템이 처음 켜질 때 시스템 호스트 프로세서에서 실행되는 구성 소프트웨어는 버스 0개의 존재만 인식한다. 소프트웨어가 바로 모든 버스를 인식하지 못한다는 뜻이다. Pcie가 initalize될 때 host bridge는 버스 넘버링(depth-first algo)을 사용하여 PCI 버스를 인식한다. 버스 트랜잭션은 ID 번호로 주소 지정 되도록 구성되는데, ID번호는 bus, device, function number로 구성된다.  Bus number : PCI bus tree에서 몇몇의 PCI bridge는 다른 PCI bridge를 포함한다. System SW는 DFS(depth-first) 알고리즘을 통해 모든 PCI 버스를 but tree n..

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..

Kconfig 용어 정리

1.  Kconfig 용어 정리    1.  bool​예 )config FEATURES>    bool "Set features for FEATURES"config =y/n로 지정 즉 , FEATURES을 define 할지 undefine 할지 정하라는 뜻이다. ​   2.  default​메뉴 엔트리의 기본 값을 정하는 명령어​   3.  depends on​현재 메뉴 엔트리의 종속성을 설정하는 명령어즉, 다른 FEATURES이 선택되면 현재 메뉴 엔트리가 활성화 되게끔 하는 명령어이다. ​예 )config FEATURES    ...    depends on FEATURES_HELPER[순서] 1) FEATURES_HELPER 활성화 2) FEATURES 활성화 ​​  4.  select​​역종속성..

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..

Linux Kernel Image Header - ARM64

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

Linux Module

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

Boot Sequence in Android

1.  Intro.   부팅 시퀀스에 대한 충분한 지식이 있으면 벽돌이 된 안드로이드를 문제 해결하거나, 커스텀 ROM을 플래싱하거나, 루팅하는 등의 작업에 유용합니다. 이 주제에 대해 놀라운 글을 쓴 기기별 포럼이 많으므로, 저는 이에 대해 이야기하지 않겠지만, 안드로이드의 부팅 시퀀스, 안드로이드의 다양한 부팅 모드, 부트로더가 잠금 해제된 폰에서 루팅이 어떻게 작동하는지에 대한 기본 사항을 살펴보겠습니다. 이 주제에 대해 조사하는 동안, 잠긴 부트로더 기기에서 루팅 기술에 대한 몇 가지 흥미로운 글을 우연히 발견했습니다. 가까운 미래에 이에 대해 이야기해 보겠습니다.:)   2.  Boot Sequence in Android Summary 1) ROMCPU에 전원이 인가되면, 지정 번지의 ROM c..