# Install Kernel and Root File System

지금까지 SD 카드에 Boot 로더를 올린 후 파티션을 나누고 포맷을 진행 그리고 임의의 디렉토리에 마운트를 진행했다.

이제부터는 커널과 루트 파일 시스템을 Install 하는 과정이다. 

우선 커널버젼에 대한 환경변수를 설정을 해야하는데, 기존 리눅스 소스를 다운받은 bb-kernel 포더에서 kenel_version 파일을 통해 커널버젼을 다음과 같이 확인이 가능하다.

현재 사용하고 있는 커널버젼은 "4.19.72-bone-rt-r40"임을 확인 할 수 있다.

따라서 다음과 같이 환경변수 설정을 할 수가 있다.

export kernel_version=4.19.72-bone-rt-r40

 

1. Copy Root File System

루트 파일 시스템을 복사하는 과정은 다음과 같다.

~/ (루트폴더에서)

sudo tar xfvp ./*-*-*-armhf-*/armhf-rootfs-*.tar -C /media/rootfs/

sync

sudo chown root:root /media/rootfs/

sudo chmod 755 /media/rootfs/

첫번째 명령어는 기존에 우리가 "ubuntu-180.04.2-minimal-armhf-2019-02-16" 폴더에 다운로드한 우분투 파일시스템 압축 파일을, MicroSD 카드를 마운트한 /media/rootfs/ 폴더에 압축해제 하는 것이다.

...중략...

그 다음 위에 언급된 명령어들을 순차적으로 다음과 같이 진행 한다.

- sync : 메모리에 저장되어 있는 작업내용을 디스크에 저장을 한다.

- sudo chown root:root /media/rootfs/ : /media/rootfs/ 내부의 owner/group을 root로 바꾼다.

- sudo chmod 755 /media/rootfs/ : 파일의 권한을 755로 하겠다는 의미로 숫자가 각각 의미하는 것은 백/십/일의 자리는 각각 2진수 3자리로 xxx(x는 1 or 0)으로 구성이 되며, 2진수의 가장 왼쪽 자리는 읽기(Reading)로 이것이 1이 되면 10진수로 4가 되며, 2진수의 중간 자리는 쓰기(Writing)로 이것이 1이 되면 10진수로 2가 되며, 2진수의 마지막 자리는 실행(Executing)으로 이것이 1이 되면 10진수로 1이 된다. 따라서 파일 권한을 755로 하는 것에서 7이 의미하는 것은 쓰기/읽기/실행의 권한을 모두 준다는 의미이며, 5의 의미는 읽기/실행에 대해서만 권한을 준다는 것이다. 또한 755에서 백/십/일의 자리가 각각 의미하는 것은 소유자권한/그룹사용자권한/기타사용자권한을 의미한다. 결과적으로 755의 의미는 소유자권한은 읽기/쓰기/실행의 모든 권한을 부여하며, 그룹사용자권한/기타사용자권한은 읽기/실행의 권한을 부여한다는 것이다.

2. 부트이미지 이름설정

~/ (루트폴더에서)

sudo sh -c "echo 'uname_r=${kernel_version}' >> /media/rootfs/boot/uEnv.txt"

uEnv.txt 파일에서 uname_r을 설정을 한다.

3. Copy Kernel Image

~/ (루트폴더에서)

sudo cp -v ./bb-kernel/deploy/${kernel_version}.zImage /media/rootfs/boot/vmlinuz-${kernel_version}

위의 명령어는 기존에 linux kernel을 컴파일 한 zImage 파일을 MicroSD 카드에 복사를 하는 것이다.

 

4. Copy Kernel Device Tree Binaries

~/

sudo mkdir -p /media/rootfs/boot/dtbs/${kernel_version}/

sudo tar xfv ./bb-kernel/deploy/${kernel_version}-dtbs.tar.gz -C /media/rootfs/boot/dtbs/${kernel_version}/

하기와 같이 MicroSD 카드에 폴더를 만들고 기존에 다운로드했던 bb-kernel의 폴더 안의 deploy 폴더에서 디바이스 트리 바이너리 압축파일을 MicroSD 카드에 새로 만든 폴더에 압축을 푼다.

참고로, ARM에서 디바이스 트리 바이너리는 x86 계열에서의 BIOS라고 보면된다.

부트로더가 커널을 시작시키기 전에 디파이스 트리 바이너리(DTB)를 메모리 영역에 Copy를 한 후 커널을 시작한다고 한다.

하기 웹사이트에서 정보를 좀 더 자세히 볼 수 있다.

https://limit0.tistory.com/entry/%EB%94%94%EB%B0%94%EC%9D%B4%EC%8A%A4-%ED%8A%B8%EB%A6%AC%EC%97%90-%EB%8C%80%ED%95%9C-%EA%B0%84%EB%9E%B5%ED%95%9C-%EC%84%A4%EB%AA%85

 

디바이스 트리에 대한 간략한 설명

ARM 리눅스에서 x86과 같은 bios 역할을 해 주는 것이 device tree 이다. device tree(DT) = open firmware(OF) = flattened device tree(FDT) 로 불리기도 한다. ㅇ 동작 bootloader는 kernel을 시작시키기 전에..

limit0.tistory.com

5. Copy Kernel Modules

~/ (루트폴더에서)

sudo tar xfv ./bb-kernel/deploy/${kernel_version}-modules.tar.gz -C /media/rootfs/

bb-kernel 폴더 내의 deploy 폴더에 기존에 다운로드 받았던 modules을 MicroSD카드에 압축을 해제합니다.

... 중략...

6. File Systems Table (/etc/fstab)

sudo sh -c "echo '/dev/mmcblk0p1  /  auto  errors=remount-ro  0  1' >> /media/rootfs/etc/fstab"

위의 명령어를 사용하여 파일시스템 테이블 정보를 생성한다.

7. Networking

네트워크 정보를 생성한다.

Edit: /etc/network/interfaces

sudo nano /media/rootfs/etc/network/interfaces

Add:

/etc/network/interfaces

auto lo

iface lo inet loopback

  

auto eth0

iface eth0 inet dhcp

 

8. Remove microSD/SD card

sync

sudo umount /media/rootfs

 

+ Recent posts