데비안: 비글본 블랙 시작하기

이 게시글은 텍사스 인스트루먼트의 Cortex-A8 기반 비글본 블랙에 대한 글입니다.

사용 가능한 부품

기판:

전원 공급 장치:

케이블:

기본 요구사항

학습

ARM 크로스 컴파일러: GCC

일반적인 리눅스에서 구동되는 (64비트) 사전 빌드 버전의 GCC입니다. 죄송하지만 (32비트) x86 사용자들은 업그레이드할 때입니다.

다운로드/추출:

#user@localhost:~$
wget -c https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/11.3.0/x86_64-gcc-11.3.0-nolibc-arm-linux-gnueabi.tar.xz
tar -xf x86_64-gcc-11.3.0-nolibc-arm-linux-gnueabi.tar.xz
export CC=`pwd`/gcc-11.3.0-nolibc/arm-linux-gnueabi/bin/arm-linux-gnueabi-

크로스 컴파일러 테스트:

#user@localhost:~$
${CC}gcc --version
#Test Output:
arm-linux-gnueabi-gcc (GCC) 11.3.0
Copyright (C) 2021 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.

부트로더: U-Boot

Das U-Boot – 범용 부트로더: http://www.denx.de/wiki/U-Boot
리눅스 배포판에 따라, gcc 및 기타 도구도 필요하므로 데비안/우분투에서는 build-essential 메타 패키지 설치부터 시작합니다.

#Requirements
sudo apt install bison build-essential flex swig

다운로드:

#user@localhost:~$
git clone -b v2022.04 https://github.com/u-boot/u-boot --depth=1
cd u-boot/

패치:

#user@localhost:~/u-boot$
git pull --no-edit https://git.beagleboard.org/beagleboard/u-boot.git v2022.04-bbb.io-am335x-am57xx

설정 및 빌드:

#user@localhost:~/u-boot$
make ARCH=arm CROSS_COMPILE=${CC} distclean
make ARCH=arm CROSS_COMPILE=${CC} am335x_evm_defconfig
make ARCH=arm CROSS_COMPILE=${CC}

리눅스 커널

이 스크립트는 커널, 모듈, 디바이스 트리 바이너리를 빌드하여 deploy 디렉토리에 복사합니다.

메인라인

다운로드:

#~/
git clone https://github.com/RobertCNelson/bb-kernel ./kernelbuildscripts
cd kernelbuildscripts/

am33x-v5.4(Longterm 5.4.x)의 경우:

#user@localhost:~/kernelbuildscripts$
git checkout origin/am33x-v5.4 -b tmp

am33x-rt-v5.4(Longterm 5.4.x + 리얼타임 리눅스)의 경우:

#user@localhost:~/kernelbuildscripts$
git checkout origin/am33x-rt-v5.4 -b tmp

am33x-v5.10(Longterm 5.10.x)의 경우:

#user@localhost:~/kernelbuildscripts$
git checkout origin/am33x-v5.10 -b tmp

am33x-rt-v5.10(Longterm 5.10.x + 리얼타임 리눅스)의 경우:

#user@localhost:~/kernelbuildscripts$
git checkout origin/am33x-rt-v5.10 -b tmp

am33x-v5.15(Longterm 5.15.x)의 경우:

#user@localhost:~/kernelbuildscripts$
git checkout origin/am33x-v5.15 -b tmp

am33x-rt-v5.15(Longterm 5.15.x + 리얼타임 리눅스)의 경우:

#user@localhost:~/kernelbuildscripts$
git checkout origin/am33x-rt-v5.15 -b tmp

빌드:

#user@localhost:~/kernelbuildscripts$
./build_kernel.sh

TI BSP

다운로드:

#~/
git clone https://github.com/RobertCNelson/ti-linux-kernel-dev ./kernelbuildscripts
cd kernelbuildscripts/

TI v4.19.x-ti의 경우:

#~/kernelbuildscripts/
git checkout origin/ti-linux-4.19.y -b tmp

TI v4.19.x + 리얼타임의 경우:

#~/kernelbuildscripts/
git checkout origin/ti-linux-rt-4.19.y -b tmp

TI v5.4.x의 경우:

#~/kernelbuildscripts/
git checkout origin/ti-linux-5.4.y -b tmp

TI v5.4.x + Real-Time의 경우:

#~/kernelbuildscripts/
git checkout origin/ti-linux-rt-5.4.y -b tmp

TI v5.10.x의 경우:

#~/kernelbuildscripts/
git checkout origin/ti-linux-5.10.y -b tmp

TI v5.10.x + Real-Time의 경우:

#~/kernelbuildscripts/
git checkout origin/ti-linux-rt-5.10.y -b tmp

빌드:

#user@localhost:~/kernelbuildscripts$
./build_kernel.sh

루트 파일 시스템

데비안 11

User Password
debian temppwd
root root

다운로드:

#user@localhost:~$
wget -c https://rcn-ee.com/rootfs/eewiki/minfs/debian-11.5-minimal-armhf-2022-10-06.tar.xz

검증:

#user@localhost:~$
sha256sum debian-11.5-minimal-armhf-2022-10-06.tar.xz
#sha256sum output:
0ea53b23483af4bcccca53f3fd907b5e404f2f607a6577d78e8c4daf5b869ad0  debian-11.5-minimal-armhf-2022-10-06.tar.xz

압축 해제:

#user@localhost:~$
tar xf debian-11.5-minimal-armhf-2022-10-06.tar.xz

microSD 카드 설정

대상 장치에서 사용할 외장 드라이브에 접근할 수 있어야 합니다. 어떤 리눅스 장치가 외장 드라이브로 잡혀 있는지 알아내기 위해 lsblk를 실행합니다.

#Example: for DISK=/dev/sdX
lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 465.8G  0 disk
├─sda1   8:1    0   512M  0 part /boot/efi
└─sda2   8:2    0 465.3G  0 part /                <- Development Machine Root Partition
sdb      8:16   1   962M  0 disk                  <- microSD/USB Storage Device
└─sdb1   8:17   1   961M  0 part                  <- microSD/USB Storage Partition
#Thus you would use:
export DISK=/dev/sdb
#Example: for DISK=/dev/mmcblkX
lsblk
NAME      MAJ:MIN   RM   SIZE RO TYPE MOUNTPOINT
sda         8:0      0 465.8G  0 disk
├─sda1      8:1      0   512M  0 part /boot/efi
└─sda2      8:2      0 465.3G  0 part /                <- Development Machine Root Partition
mmcblk0     179:0    0   962M  0 disk                  <- microSD/USB Storage Device
└─mmcblk0p1 179:1    0   961M  0 part                  <- microSD/USB Storage Partition
#Thus you would use:
export DISK=/dev/mmcblk0

microSD 카드의 파티션 테이블/레이블 삭제:

sudo dd if=/dev/zero of=${DISK} bs=1M count=10

부트로드 설치:

#user@localhost:~$
sudo dd if=./u-boot/MLO of=${DISK} count=2 seek=1 bs=128k
sudo dd if=./u-boot/u-boot-dtb.img of=${DISK} count=4 seek=1 bs=384k

파티션 레이아웃 생성:
util-linux v2.26에서, sfdisk는 다시 작성되어 이제 libfdisk를 기반으로 합니다.

#Check the version of sfdisk installed on your pc is atleast 2.26.x or newer.
sudo sfdisk --version
#Example Output
sfdisk from util-linux 2.27.1
#sfdisk >= 2.26.x
sudo sfdisk ${DISK} <<-__EOF__
4M,,L,*
__EOF__

파티션 포맷:
mkfs.ext4 1.43에서, metadata_csum과 64비트 ext4 기능을 비활성화해야 합니다.
이는 해당 대상에 필요한 U-Boot 버전이 이러한 최신 ext4 옵션의 파일 읽기를 올바르게 처리할 수 없기 때문입니다.

#mkfs.ext4 -V
sudo mkfs.ext4 -V
mke2fs 1.43-WIP (15-Mar-2016)
        Using EXT2FS Library version 1.43-WIP
#mkfs.ext4 >= 1.43
for: DISK=/dev/mmcblkX
sudo mkfs.ext4 -L rootfs -O ^metadata_csum,^64bit ${DISK}p1
 
for: DISK=/dev/sdX
sudo mkfs.ext4 -L rootfs -O ^metadata_csum,^64bit ${DISK}1

파티션 마운트:
대부분의 시스템에서 이러한 파티션은 자동으로 마운트될 수 있습니다.

sudo mkdir -p /media/rootfs/
 
for: DISK=/dev/mmcblkX
sudo mount ${DISK}p1 /media/rootfs/
 
for: DISK=/dev/sdX
sudo mount ${DISK}1 /media/rootfs/

부트로더 백업

이 버전의 MLO/u-boot.img가 본 게시글의 “eMMC” flasher 스크립트에 사용됩니다.

#~/
sudo mkdir -p /media/rootfs/opt/backup/uboot/
sudo cp -v ./u-boot/MLO /media/rootfs/opt/backup/uboot/
sudo cp -v ./u-boot/u-boot-dtb.img /media/rootfs/opt/backup/uboot/

커널 및 루트 파일 시스템 설치

새로운 사용자들을 위해, 커널 버전은 매일 변경될 수 있기 때문에 이 게시글의 커널 빌딩 스크립트가 어떤 커널 버전이 빌드 되었는지 힌트를 줄 것입니다.

-----------------------------
Script Complete
eewiki.net: [user@localhost:~$ export kernel_version=5.X.Y-Z]
-----------------------------

"export kernel_version=5.X.Y-Z"를 여러분의 build/desktop 환경과 동일하게 복사 및 붙여 넣은 다음 입력하여 나중에 사용할 환경 변수를 생성합니다.

export kernel_version=5.X.Y-Z

루트 파일 시스템 복사

#Debian; Root File System: user@localhost:~$
sudo tar xfvp ./debian-*-*-armhf-*/armhf-rootfs-*.tar -C /media/rootfs/
sync

/boot/uEnv.txt에 uname_r 설정

#user@localhost:~$
sudo sh -c "echo 'uname_r=${kernel_version}' >> /media/rootfs/boot/uEnv.txt"

커널 이미지 복사

커널 이미지:

#user@localhost:~$
sudo cp -v ./kernelbuildscripts/deploy/${kernel_version}.zImage /media/rootfs/boot/vmlinuz-${kernel_version}

커널 디바이스 트리 바이너리 복사

#user@localhost:~$
sudo mkdir -p /media/rootfs/boot/dtbs/${kernel_version}/
sudo tar xfv ./kernelbuildscripts/deploy/${kernel_version}-dtbs.tar.gz -C /media/rootfs/boot/dtbs/${kernel_version}/

커널 모듈 복사

#user@localhost:~$
sudo tar xfv ./kernelbuildscripts/deploy/${kernel_version}-modules.tar.gz -C /media/rootfs/

파일 시스템 테이블(/etc/fstab)

#user@localhost:~/$
sudo sh -c "echo '/dev/mmcblk0p1  /  auto  errors=remount-ro  0  1' >> /media/rootfs/etc/fstab"

네트워킹

수정: /etc/network/interfaces

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

추가:

#/etc/network/interfaces
auto lo
iface lo inet loopback
 
auto eth0
iface eth0 inet dhcp

microSD/SD 카드 삭제

sync
sudo umount /media/rootfs

HDMI

이 부분에서는 여러분이 이미 lxde, xfce, kde, gnome 등과 같은 선호하는 xorg 기반 윈도우 매니저를 설치하였다고 가정합니다. 선택한 윈도우 매니저 위에 설치해야 하는 패키지이며 xorg.conf는 비디오 인터페이스를 올바르게 설정해야 합니다.
참고: 커서가 바로 나타나지 않으면, 커서가 나타날 때까지 ctlr-alt-f1를 우선 누른 다음 ctrlr-alt-f7를 누릅니다.
fbdev 드라이버와 xrandr 유틸리티를 설치해야 합니다:

sudo apt update
sudo apt install read-edid xserver-xorg-video-fbdev x11-xserver-utils
#/etc/X11/xorg.conf
Section "Monitor"
        Identifier      "Builtin Default Monitor"
EndSection
Section "Device"
        Identifier      "Builtin Default fbdev Device 0"
        Driver          "fbdev"
EndSection
Section "Screen"
        Identifier      "Builtin Default fbdev Screen 0"
        Device          "Builtin Default fbdev Device 0"
        Monitor         "Builtin Default Monitor"
EndSection
Section "ServerLayout"
        Identifier      "Builtin Default Layout"
        Screen          "Builtin Default fbdev Screen 0"
EndSection

xrandr:

xrandr
xrandr --output HDMI-0 --mode 1024x768 --rate 60

xrandr (serial/ssh를 통해)

xrandr -display :0.0 -q
xrandr -display :0.0 --output HDMI-0 --mode 1024x768 --rate 60

eMMC

microSD 카드를 eMMC에 복사하는 스크립트: (다음 패키지를 설치해야 합니다: initramfs-tools, dosfstools, rsync)

wget https://raw.githubusercontent.com/RobertCNelson/boot-scripts/master/tools/eMMC/bbb-eMMC-flasher-eewiki-ext4.sh
chmod +x bbb-eMMC-flasher-eewiki-ext4.sh
sudo /bin/bash ./bbb-eMMC-flasher-eewiki-ext4.sh

U-Boot 오버레이

전체 문서: [Beagleboard:BeagleBoneBlack Debian - eLinux.org]

문제가 있다면:

#Any issues run:
sudo /opt/scripts/tools/version.sh

활성화:

#/boot/uEnv.txt
enable_uboot_overlays=1

eMMC 비활성화:

#/boot/uEnv.txt
disable_uboot_overlay_emmc=1

HDMI 비디오 및 오디오 비활성화:

#/boot/uEnv.txt
disable_uboot_overlay_video=1

HDMI 오디오 비활성화:

#/boot/uEnv.txt
disable_uboot_overlay_audio=1

WL1835 비활성화:

#/boot/uEnv.txt
disable_uboot_overlay_wireless=1

BB-ADC 비활성화:

#/boot/uEnv.txt
disable_uboot_overlay_adc=1

U-Boot: 감지된 케이프 오버라이드

#/boot/uEnv.txt
uboot_overlay_addr0=<file0>.dtbo
uboot_overlay_addr1=<file1>.dtbo
uboot_overlay_addr2=<file2>.dtbo
uboot_overlay_addr3=<file3>.dtbo

U-Boot: 감지된 케이프의 자동 로딩 비활성화

#/boot/uEnv.txt
disable_uboot_overlay_addr0=1
disable_uboot_overlay_addr1=1
disable_uboot_overlay_addr2=1
disable_uboot_overlay_addr3=1

U-Boot: 감지되지 않은 케이프 4개 더 로드

#/boot/uEnv.txt
uboot_overlay_addr4=<file4>.dtbo
uboot_overlay_addr5=<file5>.dtbo
uboot_overlay_addr6=<file6>.dtbo
uboot_overlay_addr7=<file7>.dtbo

U-Boot: PRU 옵션 (v4.19.x-ti)

#/boot/uEnv.txt
uboot_overlay_pru=AM335X-PRU-RPROC-4-19-TI-00A0.dtbo

U-Boot: PRU 옵션

#/boot/uEnv.txt
uboot_overlay_pru=AM335X-PRU-UIO-00A0.dtbo

U-Boot: Cape Universal 활성화

#/boot/uEnv.txt
enable_uboot_cape_universal=1

댓글

질문이나 의견은 다음 TechForum을 방문 바랍니다: Linux discussion



영문 원본: Debian: Getting Started with the BeagleBone Black