비글본블랙에 리눅스 커널 설치하기
이글은 하기 경로의 글을 참조하여 작성하였습니다.
https://eewiki.net/display/linuxonarm/BeagleBone+Black
(거의 동일하므로 직접 보고 따라하셔도 무방합니다.)
개발환경은 ARM 크로스 컴파일러가 64bit로 pre-built 되어 있어서
64bit환경의 리눅스 호스트가 필요합니다.
해당 글은 Ubuntu 16.04 64bit 버전에서 진행하였습니다.
1. ARM Cross Compiler:GCC 설치
크로스 컴파일러는 간단하게 이기종 플랫폼에서 타겟 플렛폼에 맞는 실행파일을
만들어 주는 역활을 합니다.
해당 포스팅의 경우 Host는 Intel기반 PC이고 타겟은 비글본블랙(ARM)이죠....
다운로드 및 컴파일러 경로 설정 :
~/ |
tar xf gcc-linaro- 5.3 . 1 - 2016.05 -x86_64_arm-linux-gnueabihf.tar.xz export CC=`pwd`/gcc-linaro- 5.3 . 1 - 2016.05 -x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- |
테스트시 아래와 같은 메세지 나오면 정상 설치 :
~/ |
arm-linux-gnueabihf-gcc (Linaro GCC 5.3 - 2016.05 ) 5.3 . 1 20160412 Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
2. 부트로더(U-Boot) 설치 및 컴파일
부트로더란 운영체제가 시동되기 전 실행되는 최초의 시스템 프로그램으로
하드웨어 초기화 및 검사등의 기초적인 작업으로 커널이 올바르게 실행되기 위한
작업을 하는 프로그램 입니다.
보통 임베디드 시스템에서는 u-boot가 가장 많이 쓰입니다.
다운로드:
~/ |
cd u-boot/ git checkout v2016. 09 -rc2 -b tmp |
패치:
~/u-boot |
patch -p1 < 0001 -am335x_evm-uEnv.txt-bootz-n-fixes.patch |
설정 및 빌드:
~/u-boot |
make ARCH=arm CROSS_COMPILE=${CC} distclean make ARCH=arm CROSS_COMPILE=${CC} am335x_evm_defconfig make ARCH=arm CROSS_COMPILE=${CC} |
위 과정을 통하여 커널이 완료되면 u-boot 폴더 안에
MLO와 u-boot.img 가 생성됩니다.
각각을 first 부트로더 second 부트로더라고 하는데
초기화 안된 초기 하드웨어의 가용할 수 있는 rom용량이 작아서
first부트로더가 second 부트로더를 올릴수 있게 최소한의 하드웨어 초기화를 하고
초기화가 된 ram에 second 부트로더를 올려 나머지 초기화를 진행 합니다.
3. 리눅스 커널 컴파일
해당 글은 추후 프로젝트를 위해 커널 버전 v4.4에 Real Time 커널을 대상으로 합니다.
리눅스에 real time성을 부여하는 방법으로는 여러가지 방법이 있으나(RTAI, Xenomai 등등..)
최근 RT커널도 성능이 많이 향상되었다고 하여 해당 커널로 진행 합니다.
커널 다운로드
~/ |
cd bb-kernel/ |
커널 체크아웃(git)
am33x-rt-v4.4(Longterm 4.4.x + Real-Time Linux)
~/bb-kernel |
|
커널 빌드:
~/ |
./build_kernel.sh |
4. 루트 파일 시스템 설치
커널이 자동차의 엔진이라면 루트 파일시스템은 그외 나머지 인터페이스라 할수 있습니다.
자동차 핸들, 바퀴, 차체가 있어야 자동차가 굴러가듯이
커널과 인터페이스 할 수 있는 쉘과 같은 프로그램을 포함하는 파일 시스템이 있어야
운영체제로서의 활용이 가능합니다.
파일시스템은 데비안 및 우분투, Angstrom, Arago계열이 있으며 아래 내용은
우분투 16.04 LTS 버전 입니다.(개인적으로 선호....)
UserID : ubuntu
Password : temppwd
다운로드:
~/ |
|
확인:
~/ |
ae6b466e4782d4b6cd2a14f6d785b75de00623e3afe0967f38f51537dd97feba ubuntu- 16.04 . 1 -minimal-armhf- 2016 - 08 - 16 .tar.xz
|
압축풀기:
~/ |
|
5. microSD 카드에 설치
위 과정이 모두 끝났으면 부트로더와 커널 그리고 루트 파일 시스템을 설치해야 합니다.
보통 microSD카드를 카드 리더기에 연결하면 장치명은 /dev/sd(x) 로 나오는데
이는 명령어 lsblk 또는 df -h 로 확인이 가능하니 맞는 명칭으로 진행하시면 됩니다.
DISK 환경변수 설정
export DISK=/dev/sdb |
microSD 카드 포멧
sudo dd if=/dev/zero of=${DISK} bs=1M count=10 |
부트로더 설치
~/ | |
|
여기서 사용되는 sfdisk 와 mke2fs tool은 파티션을 생성하고 파일 시스템을 만드는 툴인데
이게 버전에 따라서 약간 명령어가 다릅니다.
이부분은 저도 확실치 않으니 맨위에 링크된 곳 주소에서 직접보시고 하는것이 좋을 것 같습니다.
Host가 우분투 16.04를 기준으로 설명합니다.
sfdisk는 v2.27.1
mke2fs 는 v1.42.13
파티션 생성:
sfdisk >= 2.26x |
sudo sfdisk ${DISK} <<-__EOF__ 4M,,L,* __EOF__ |
파일 시스템 생성(파티션 포멧):
mkfs.ext4 <= 1.42 |
sudo mkfs.ext4 -L rootfs ${DISK} 1 |
정상적으로 파티션을 생성 하셨다면 거의 대부분
/media/_User_/rootfs/ <- 요렇게 자동으로 마운트 됩니다.
만일 없다면 microSD카드를 다시 인식 시키거나
위 파티션 생성 작업을 다시한번 해보시기 바랍니다.
커널 및 루트 파일 시스템 설치(to microSD)
위에서 체크아웃 받은 bb-kernel 폴더 안에 들어가서
kernel_version 이라는 파일을 열어 커널 버전을 확인할수 있습니다.
kernel_version 환경변수 설정
export kernel_version=4.X.Y-Z (예:4.4.20-bone-rt-r13) |
루트 파일 시스템 복사
~/ |
|
Boot 이미지 이름 설정
~/ |
|
커널 이미지 복사
~/ |
sudo cp -v ./bb-kernel/deploy/${kernel_version}.zImage /media/_user_/rootfs/boot/vmlinuz-${kernel_version} |
커널 디바이스 트리 복사
~/ |
sudo mkdir -p /media/_user_/rootfs/boot/dtbs/${kernel_version}/ sudo tar xfv ./bb-kernel/deploy/${kernel_version}-dtbs.tar.gz -C /media/_user_/rootfs/boot/dtbs/${kernel_version}/ |
커널 모듈 복사
~/ |
sudo tar xfv ./bb-kernel/deploy/${kernel_version}-modules.tar.gz -C /media/_user_/rootfs/ |
파일 시스템 테이블 정보 생성
/etc/fstab |
s |
하기 경로에 상세한 내용이 있네요. 참고 하시면 좋을 것 같습니다.
네트워크 정보 생성
Edit: /etc/network/interfaces
sudo vim /media/_user_/rootfs/etc/network/interfaces |
내용 추가
/etc/network/interfaces |
auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp |
Edit: /etc/udev/rules.d/70-persistent-net.rules
|
내용 추가
/etc/udev/rules.d/70-persistent-net.rules |
# BeagleBone: net device () SUBSYSTEM== "net" , ACTION== "add" , DRIVERS== "?*" , ATTR{dev_id}== "0x0" , ATTR{type}== "1" , KERNEL== "eth*" , NAME= "eth0" |
위 경로를 보시면 udev가 있죠, 쉽게 말하면 리눅스 커널용 장치 관리자 입니다.
그리고 위 파일은 네트워크 장치에 대한 정보를 담고 있는 파일입니다.
위 과정까지 모두 되셨으면 microSD카드를 뽑아
비글본 블랙에 삽입후 보드 부팅 합니다.
이때에 있으면 좋은게 아래 경로의 케이블인데요
(USB to serial adapter) TTL-232R-3V3
usb to serial에다가 3.3V로 전압레벨 컨버팅 까지 해주기 때문에
비글본 블랙과 같은 보드 디버깅시에 상당히 편합니다.
다만 가격이 좀 높습니다.
위 케이블을 통하여 부팅 메세지를 확인하고 혹시라도
커널 패닉시에 어디서 발생했는지 확인이 가능합니다.
6. USB 가젯(gadget)
usb 가젯 드라이버를 통해 비글본과 마치 유선네트워크 처럼
연결될수 있습니다.
상당히 편리합니다. usb를 통해 보드 전원도 공급되면서
삼바 같은 설정을 통해 네트워크로 접속도 가능합니다.
해당 작업은 보드 부팅 후 일단 eth0 유선랜을 꼽아 설정을 한 후에
사용하시면 될것 같습니다.
드라이버 설치
|
네트워크 설정 추가
/etc/network/interfaces |
# Ethernet/RNDIS gadget (g_ether) # ... or on host side, usbnet and random hwaddr iface usb0 inet static address 192.168 . 7.2 netmask 255.255 . 255.252 network 192.168 . 7.0 gateway 192.168 . 7.1
|
스크립트?
chmod +x beaglebone-black-g-ether-load.sh sudo ./beaglebone-black-g-ether-load.sh |
윈도우 상에서 Putty ssh(192.168.7.2)로 접속 화면 입니다.