.  라즈베리 확장

임베디드 개발 환경 구축


§module built-in
http://poplinux.tistory.com/106 참고 (Makefile 내용)
http://sonseungha.tistory.com/112 참고(모듈 빌트인 방법)
http://chlrbgh0.tistory.com/110 참고(모듈 빌트인 방법)
저번 시간에는 커널 모듈을 insmod로 적재하는 것을 해보았고 이번에는 모듈을 커널 이미지에 built-in을 해보고자 한다. (http://kkn1220.tistory.com/14)

- Makefile을 살펴보면 
obj-y := audio_device.o
obj-m := audio_device.o
obj-$(CONFIG_TEST) := audio_device.o 를 살펴볼 수 있다.
위의 -y 옵션은 built-in을 할 때의 옵션이고 -m은 모듈 형식으로의 옵션이다. 
마지막의 경우 리눅스 커널 configure 할 때 사용되는 옵션은
- (*) : built-in
- (M) : Module
- ( ) : not built
이 있는데 해당 옵션을 체크했을 때 make menuconfig 결과에 따라 모듈이나 빌트인으로 알아서 컴파일 된다. 

- 예제
      - hello.c code


- Makefile


- hello 파일 내부(cd linux/driver/hello)  linux폴더-driver폴더 내 hello 폴더 생성


- Makefile 수정

- vi linux/driver/Makefile        //리눅스 폴더 내 드라이버의 Makefile을 수정하는 것이다.


마지막에 obj-y += hello/ 를 적어준당


리눅스 폴더에 가서(cd ../../) 

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig 실행

(*여기에서 arm-linux-gnueabihf-bcm2709_defconfig의 위치는 각자 설정해주어야 된다)

(본인의 경우 make ARCH=arm CROSS_COMPILE=/home/kkn/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- bcm2709_defconfig가 경로이다)



make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs

(make ARCH=arm CROSS_COMPILE=/home/kkn/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- zImage modules dtbs)

(사실 dtbs는 필요한지 아닌지는 모르겠당.. 어차피 make clean하지 않아서 금방 진행되므로 무시하고 컴파일 했음)




새로 생성한 hello폴더 내 hello가 built-in되는 것을 확인할 수 있다.



진행이 끝나면 위의 메시지를 확인할 수 있다.(한 10초 걸린듯)


sd카드에 설치 (lsblk 명령어로 sd카드가 올라와있는지 확인해야함)

-mount

$ mkdir mnt/fat32

$ mkdir mnt/ext4

$ sudo mount /dev/sdb1 mnt/fat32

$ sudo mount /dev/sdb2 mnt/ext4

-모듈 설치
  $ sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=mnt/ext4 modules_install

*arm-linux-gnueabihf는 앞 장의 컴파일러 path, INSTALL_MOD_PATH는 설치할 path 경로

- kernel image(mkknlimg 스크립트로 변환 필요), dtb(device tree blob) 복사

$ sudo cp mnt/fat32/$KERNEL.img mnt/fat32/$KERNEL-backup.img    //필수 항목은 아님(백업용)

$ sudo scripts/mkknlimg arch/arm/boot/zImage mnt/fat32/$KERNEL.img        

(scripts는 linux폴더 에서 실행해야함, $KERNEL.img 는 kernel7.img를 지칭(kernel.img 조심하자))

$ sudo cp arch/arm/boot/dts/*.dtb mnt/fat32/   

(dtb는 사실 안바뀌었을 거 같지만 난 초보기 때문에 그냥 복사...)

$ sudo cp arch/arm/boot/dts/overlays/*.dtb* mnt/fat32/overlays/

$ sudo cp arch/arm/boot/dts/overlays/README mnt/fat32/overlays/

$ sudo umount mnt/fat32

$ sudo umount mnt/ext4


라즈베리파이에 sd카드를 넣고 booting


uname -a로 확인


dmesg로 확인



lsmod는 로딩된 모듈만 확인하는 것이고 built-in 된 것은 출력되지 않는다고 한다..
왜 안나오나 잘못되었나 싶었음..


시스템콜 후킹한 것을 테스트해보았을 때에는 부팅 될 때 메시지가 출력되면서 멈춤..

너무 많은 메시지를 호출해서 멈춘걸까 아니면 init에서 필수 드라이버가 로딩되기 전에 진행이 되어서 그런걸까 좀 더 공부해야할듯..




* module을 insmod할 때에는 linux폴더 내 System.map에는 모듈 심볼이 없지만 built-in을 할 때에는 있는 것을 확인할 수 있다.


(이런식으로..)







교재: "국가공인" 리눅스마스터 1급 ((주)수퍼유저, 저자 박성수, 강기봉, 정우영)


국가공인 리눅스마스터 1급

저자
박성수강기봉 지음
출판사
수퍼유저코리아 | 2014-01-13 출간
카테고리
컴퓨터/IT
책소개
국가공인 리눅스마스터 1급 교재이다. 리눅스마스터 1급 1차, ...
가격비교

 



Part1. 리눅스 실무의 이해

Chapter 03. 네트워크의 이해

3.2 네트워크 설정

3.2.1 환경 설정


방대한 책범위와 시험기간이 얼마 안남은 관계로 전략변경

- 빠른 시일내에 책 훑기

- 문제를 풀면서 내용 정리


- 업데이트 할 목록

-> 이더넷 설정, 네트워크 환경 설정, 네트워크 관련 명령어(netconfig, ifconfig, route, netstat, traceroute, tracepath, ping, arp, nslookup, dig, host)

교재: "국가공인" 리눅스마스터 1급 ((주)수퍼유저, 저자 박성수, 강기봉, 정우영)


국가공인 리눅스마스터 1급

저자
박성수강기봉 지음
출판사
수퍼유저코리아 | 2014-01-13 출간
카테고리
컴퓨터/IT
책소개
국가공인 리눅스마스터 1급 교재이다. 리눅스마스터 1급 1차, ...
가격비교

 



Part1. 리눅스 실무의 이해

Chapter 03. 네트워크의 이해

3.1 네트워크 기초

3.1.1 OSI 7 LAYER



방대한 책범위와 시험기간이 얼마 안남은 관계로 전략변경

- 빠른 시일내에 책 훑기

- 문제를 풀면서 내용 정리


- 업데이트 할 목록

-> OSI7 계층 이해, 네트워크장비(케이블-UTP, BNC). NIC, 허브, 라우터, 브리지, 게이트웨이, 리피터), 이더넷/LAN정리), TCP-IP, ARP)

+ Recent posts