임베디드/리눅스 커널

trace32, Driver분석

twoweeks-within 2025. 3. 13. 17:00

 

 

trace32: sys-down <> sys-up

> vmlinux file in 

with CrossCompile : (build) PC ( intel, AMD) -> 동작 : ARM 

 

1. PC : 우분투 or WSL 로 리눅스 -> git bc bison flex + a 설치 ,

                                                    + crossbuild-essential -armhf : 

                                                        // h : hard, f : floating  > 수동소수점

2. git clon ~~ 으로 가져옴

3. build : bcm2709_defconfig : bcm2709에 관련된 컴파일 하겠다 

              ARCH = arm (arm 이라는 코어에 ) _cross_compile  : arm-linux-guneabif-gcc (컴파일러명)

/*

Image   : 64bit

zImage : 32bit

 

-j : 사용 cpu 수 

 

%ㅣ : 필드 주소

% t  : 필드 타입

 

*/

.>> 컴파일

 

컴파일중 빌드 꼬였을때 

 : 1. out 폴더 rm

   2. linux > make ARCH =arm mrproper 

        -> 초기상태

 

debugfs 드라이버

// fs : filesystem 

 

kernel ~= OS 

-> 실수로 복구할때

    > boot code 에서 복구 ( 이미지 덮어쓰기)

ex) int g_flag = NUM;  // global로 선언

     mian() { if( NUM == g_flag) ~~}

/*

    if(A==3) <> if(A=3) 을 실수로 입력시 3이 A 값으로 들어가버림 

 > if(3==A) <> if(3=A) 를 실수로 해도 컴파일오류로 disaster 방지

*/

// drivers/soc/bcm : (broadcom)

// Makefile obj -$(config) += bcm.o 

//    > config = y 일시 , bcm.o 을 추가

// vi editor 정렬 :  " = "

// printk -> dmesg 로 가져옴

// echo 7989 > val  : val 변수에 7989를 넣음

 

모르는건 grep 으로 추적 

__init__"   "

            __ cold : 메모리절약 , unlikely 로 처리

/*

if문을 컴파일러가 해석할때

likely(x)     __build_expect((x),1)) : 1일것으로 예측 // 동작성 확보

unlikely(x)                 ""      ((x),0)) : 0  "                  // 메모리, 시간 절약

*/

             __latent_entropy__ : 함수 주소를 무작위로 -> 보안성

             __noinitretpoline__ : 함수 분기점, 복귀 주소를 무작위로 -> 보안

                // noinit : 사용x

*/

__atribute__((함수)) : GCC제공 확장기능(속성부여)

                   ((__used__)) : 최적화 방지  // 변수를 아예 삭제하는것을 

// <>  volatile : 변수의 값이 변경될 수 있음을 알림 (인터럽트 등)  ->  값이 메모리에서 항상 읽히도록 // skip 하지 않도록

                  ((aligned_(x)) : 메모리주소 x 배 확보

                  ((__packed__)) : 구조체 메모리할당을 실제 그만큼만
               ex) int2, char1 구조체 > (사용x) 12byte (효율성)  

                                                     (사용0)  9byte  (공간절약)

                  ((section("영역")) : 임의의 함수/변수 -> 특정영역에 넣기

                                                                         ->그 영역 이후엔 다시사용x > 메모리해제

      

오브젝트 파일구성 ( .o) ,( elf파일)

1. ELF HEADER , CODE, DATA, DEBUG SECTION 

 

debugfs_create_dir(이름, 속성)

    -> sys/kernel/debug/여기로

// chmod : 파일 권한

// ex) S-IRUGO : Read User, Group, Other

debugfs_create_file ( "파일명" , 권한옵션(chmod) , 디렉토리, NULL, ~~_stat_fops : 읽고쓸때 뭔행동하는지?)

// .c           : 함수 (인자1, 인자2, 인자3)

// #define  : 함수 (인자1, 인자2, 인자3)

platform_driver_resiger( &총 정보 구조체)

>> 드라이버 등록!     

                                    

 

 

'임베디드 > 리눅스 커널' 카테고리의 다른 글

Process-2  (0) 2025.03.22
Process  (0) 2025.03.13
ftrace  (0) 2025.02.26
중간정리..  (0) 2025.02.24
1. 커널  (0) 2025.02.17