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( &총 정보 구조체)
>> 드라이버 등록!