라즈베리 확장

임베디드 개발 환경 구축


https://www.raspberrypi.org/documentation/linux/kernel/building.md 참고

http://cs.sch.ac.kr/lecture/Embedd/2012/12-EmbedSW-11-Module.pdf 참고

§크로스 컴파일
대부분의 사용자들은 PC라는 동일한 환경에서 프로그램을 작성 및 컴파일하고 동일한 환경에서 실행한다. 이 때 컴파일을 네이티브  컴파일이라 하고 PC 환경에서 라즈베리용 모듈을 컴파일하여 라즈베리 환경에서 실행. 즉 컴파일은 PC에서 하였고 실행은 라즈베리 파이 환경에서 하는데 이렇게 동작하는 환경과 시스템이 다를 때 이 컴파일을 크로스 컴파일이라고 함

1. 라즈베리 파이 커널 소스 다운로드

$ git clone --depth=1 https://github.com/raspberrypi/linux  //depth의 경우 히스토리는 복제하지 않기 때문에 빠름

2. 툴체인 설치

$ git clone https://github.com/raspberrypi/tools

-컴파일러 위치를 아는 것이 중요한데

          32bit: /tool/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin

          64bit: /tool/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin  이다.

3. 소스 빌드  

$ cd linux

$ KERNEL=kernel7 

$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig

-2번째 줄의 경우 라즈베리파이2kernel7이다. 라즈베리파이2boot partition에는 kernel도 있고 kernel7도 있으니 혼동 주의

   $ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs
-Note: To speed up compilation on multiprocessor systems, and get some improvement on single processor ones, use -j n where n is number of processors * 1.5. Alternatively, feel free to experiment and see what works


4. SD card에 직접 설치

-리눅스 머신에서 $lsblk을 입력할 경우(SD card input) sdb1,2가 나오는 것을 확인할 수 있다.(NOOBS의 경우 최소 5) 이 때, 1FAT partion, 2ext4 partion이다.
-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

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

$ 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


5. 모듈 임베디드 장치에서 실행

-샘플코드 hello.c 


- 샘플코드 Makefile


기존의 폴더에서


- Make를 했을 때 아래와 같이 실행이 된다.


다음과 같이 파일이 생성된 것을 확인할 수 있다.

modinfo hello모듈을 확인한 결과 armv7으로 컴파일 된 것을 확인할 수 있다.

scp를 통한 라즈베리로 모듈 전달
lsmod 현재 모듈 확인  
- insmod 후 모듈 확인

-dmesg로 메시지 확인  
- rmmod dmesg로 메시지 확인

















+ Recent posts