리눅스 커널 코드(리눅스 개발자) -> 리눅스 코드, 드라이버 코드, 샘플 코드 (SoC업체) -> 드라이버 추가 개발(BSP 업체) -> 보드 + sw 샘플 + 디바이스드라이버 포함된 리눅스 소스코드(고객)디바이스 드라이버를 개발하려면 커널 빌드를 한번 해두어야 편하
캐릭터 디바이스(chrdev) : Byte 단위로 값 전달블록 디바이스(blkdev) : kb 이상의 블록단위로 값을 전달네트워크 디바이스(netdev) : socket 을 열고 ioctl 이라는 System Call 로 장치를 제어Device Node는 Device
특정 배열 인덱스 초기화 특정 구조체 초기화 구조체 콜백함수와 연결
read : 커널 모듈로부터 장문의 데이터 받기 write : 커널 모듈로에 장문의 데이터 보내기app.cnobrand.cioctl : 만능, read/write 둘다 가능, 대신 가독성 떨어짐 또한 ioctl은 값 하나의 데이터를 보내고 받을 수 있다.장문의 데이터를
bcm2711 칩 라즈베리파이 데이터시트일반적인 Memory Address는 32bit를 사용한다.0x0000 0000 ~ 0xFFFF FFFF 까지 각 1Byte 공간을 저장하여 총 4GByte 저장 공간 Address를 가짐하지만, 라즈베리파이의 ARM에 LPAE
ioctl : short for Input Output Controlioctl(fd, cmd, argument) : 3 개의 파라미터1\. File descriptor2\. cmd : 구분자3\. argument : 추가 정보CMD 구성 : 약속된 cmd 변수의 비트
app단에서 사용하는 헤더를 커널형으로 변환해서 사용할 수 있다.와 같이 변경해서 사용하면, app에서 사용한 라이버러리와 동일하게 사용가능하다.insmod를 통해 원하는 파라미터를 집어넣을 수 있다.kernel.cinsmod kernel c 100 0 num=10 w
Bootloader: 부팅시 운영체제 사용되기 이전에 동작되는 프로그램으로 Disk 에 저장되어 있는 운영체제를 실행 시키는 역할커널이 동작되기 전 준비를 마치고, 커널을 메모리에 적재 후 제어권을 넘기는 프로그램이므로, 메모리 직접 접근이 가능하다.부트 스트랩 로더