본문 바로가기

학부_대학원

(121)
리눅스 커널 부팅 과정[0] 리눅스 커널 소스의 부팅 과정 하나 하나 깊게 짚고 들어가기 전에 넓게 그림을 그리고 간다. (0) start.S 부분이 리눅스 커널의 가장 먼저 시작 부분. (/linux-3.16.3-elv210-v01/arch/arm/boot/compressed) misc.c 부분 (/linux-3.16.3-elv210-v01/arch/arm/boot/compressed) (1) 리눅스 커널의 압축이 해체가 됨 (2) 압축된 코드를 재배치 함 (compressed/head.S) (3) head.S (arch/arm/kernel/) —> 위의 head.S 와는 다름 시스템을 초기화 한 후, start_kernel을 호출한다. 이러한 부분에서 스택과 같은 것을 설정한다. 그 후 이제 .c 파일이 실행 할수 있게 된다. ..
리눅스 커널 이미지 구조 리눅스 커널 이미지 구조 - vmlinux 파일 커널 소스의 최상위 디렉토리에 만들어짐 압축되지 않은 elf 포맷의 파일의 커널 이미지 ex) 다음과 같은 경로에 생김. (최상위 디렉토리) - System.map 파일 symbol들의 메모리 위치 맴을 보여준다. (디버깅, 포렌식에 사용된다) 리눅스 커널 이미지는 다시 0xc0000000에 다시 매핑된다. - Image 최상위 디렉토리의 vmlinux 를 binary 포맷으로 변환시킨 압축되지 않은 커널 이미지 위의 vmlinux에서 실행될 때 사용되는 것만 가져옴 - vmlinux 파일 (~/arch/(cpu)/boot/compressed/) 해당 위치에 존재하는 vmlinux파일의 경우, 압축되어 있는 파일이다. 최상위 디렉토리에서의 vmlinux에서..
[임베디드 정리] 부트로더에서 printenv해서 그냥 보통 수정할만한 내용은 initrd 가 가장 바뀔 가능성이 높음 메인 메모리 그리고 접근하도록 하자. 추천 참고 레퍼 사이트 : embedded crazy boy ioctl —> 제어 데이터를 핸들링 write —> 실질적인 데이터를 핸들링 디바이스 드라이버의 데이터 제어 데이터 실질적인 데이터 ioctl 구성 32bit로 구성 [2] [ 14(데이터 크기) ] [ 8 (매직넘버) ] [ 8(구분번호) ] 매직넘버 : 아스키값도 가능 사이즈만 넘지 않자 cmd 명령의 해석 매크로 함수 _IOC_NR : 구분 번호 필드 값을 읽는 매크로 _IOC_TYPE : 매직 넘버 필드값을 읽는 매크로 _IOC_SIZE : 데이터의 크기 필드값을 읽는 매크로 _IOC_DIR : 읽..
(임베디드)리눅스 커널 모듈 - IOCTL ioctl 구성 32bit로 구성 [2] [ 14(데이터 크기) ] [ 8 (매직넘버) ] [ 8(구분번호) ] 매직넘버 : 아스키값도 가능 사이즈만 넘지 않자 cmd 명령의 해석 매크로 함수 _IOC_NR : 구분 번호 필드 값을 읽는 매크로 _IOC_TYPE : 매직 넘버 필드값을 읽는 매크로 _IOC_SIZE : 데이터의 크기 필드값을 읽는 매크로 _IOC_DIR : 읽기와 쓰기 속성 필드값을 읽는 매크로 cmd 명령의 작성 매크로 함수 _IO : 부가적인 데이터가 없는 명령을 만드는 매크로 _IOR : 데이터를 읽어오기 위한 명령을 작성 _IOW : 데이터를 써 넣기 위한 명령을 작성 _IOWR : 디바이스 드라이버에서 읽고 쓰기위한 명령을 작성하는 매크로 해당 프로그램은 보드에 led를 제어하는..
(임베디드)리눅스 커널 모듈 - 인터럽트, 플랫폼 디바이스 드라이버 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121/******************************************************************** * * elv210_keybutton.c * ELV210 key button device driver * * EINT1 (GPH0_..
Platform Device Driver Built In[플랫폼 디바이스 드라이버 빌트인] 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118[step7 : Keybutton Driver (LDM platform_driver) ] [1] ~/arch/arm/mach-s5pv210/mach-elv210.c //cpu//board///* tip * 보드는 누군가의 보드를 보고 만듬, 그래서 참고한 부분이 꼭 존재함..
(임베디드)리눅스 커널 모듈 - User, Kernel 통신 USER MODE KERNEL MODE [.ko] == kernel object 런타임 상에 적재, 추출 가능 USER MODE 와 KERNEL MODE 의 통신이 필요하다. USER MODE KERNEL MODE 통신에 관해서 진행한다. 앱 계층과 커널 모드 통신 할 때, 리눅스 커널에서 권고 사항이 존재함 [Documnet File 참초] 4가지 1. Copy to User [4 바이트 이상] Copy from User [4 바이트 이상]Put User [4 바이트 이하]Get User [4 바이트 이하] 권고 사항일 뿐, Get과 Put 도 가능 tip 커널에서 구조체를 초기화 할 때, sprintf 사용하자 구조체를 만 들 때, 4 바이트 단위로 만들어서 구조체 크기를 align 만들 때가 있다...
Mango Board 정리 보호되어 있는 글입니다.