2025/06/10

跨平台編譯BeagleBone Black的作業系統

摘要

本文概要介紹在Ubuntu宿主上跨平台編譯BeagleBone Black單板電腦的U-Boot開機載入程式、Linux作業系統核心、及Debian的根檔案系統等組件,並將各組件寫入SD卡的步驟。

本文

跨平台編譯的特點可以參考這裡的描述。隨後將於Ubuntu 24.04作業系統下載預先建構完畢的ARM之GCC編譯器,並下載建構BeagleBone Black的U-Boot開機載入程式(boot loader)Linux核心(kernel)、及Debian Bullseye的根檔案系統(root filesystem)的原始碼及/或封存檔案(archive)等組件,末尾再將這些組件寫入SD卡。其中,僅寫入SD卡的步驟會在Ubuntu 24.04宿主上面執行,其餘的步驟都將於Docker容器(plucky)上執行,Docker容器和宿主將透過掛載一個volume來共享空間。這些步驟主要參考Debian: Getting Started with the BeagleBone Black一文。

於容器操作的指令如下。

docker pull ubuntu:plucky
docker run --name plucky-inst -it --cpuset-cpus="6,7,8,9,10,11,12,13,14,15" --memory="24g" -v ~/Downloads:/experiment ubuntu:plucky bash

apt-get update
apt-get install sudo
USER=`id -nu 1000`
PASSWORD="password"
usermod -a -G sudo $USER
echo "$USER:$PASSWORD" | chpasswd
echo "root:$PASSWORD" | chpasswd
sudo -i -u $USER

sudo apt-get install git
sudo apt-get install wget
sudo apt-get install xz-utils
sudo apt-get install lz4
sudo apt-get install cpio
sudo apt-get install libssl-dev
sudo apt-get install bc lsb-release man-db gettext pkg-config libmpc-dev u-boot-tools zstd
sudo apt-get install libncurses-dev:amd64
sudo apt-get install bison build-essential flex swig

cd /experiment
mkdir DigiKey
cd DigiKey

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-

git clone -b v2022.04 https://github.com/u-boot/u-boot --depth=1
cd u-boot/

git pull --no-edit https://git.beagleboard.org/beagleboard/u-boot.git v2022.04-bbb.io-am335x-am57xx

make ARCH=arm CROSS_COMPILE=${CC} distclean
make ARCH=arm CROSS_COMPILE=${CC} am335x_evm_defconfig
make ARCH=arm CROSS_COMPILE=${CC}

cd ..

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

git checkout origin/am33x-v5.15 -b tmp
./build_kernel.sh

#menuconfig, exit directly

cd ..

wget -c https://rcn-ee.com/rootfs/eewiki/minfs/debian-11.5-minimal-armhf-2022-10-06.tar.xz
sha256sum debian-11.5-minimal-armhf-2022-10-06.tar.xz

tar xf debian-11.5-minimal-armhf-2022-10-06.tar.xz

exit
exit
docker rm -f plucky-inst
docker rmi ubuntu:plucky

於宿主操作的指令如下。

cd ~/Downloads/DigiKey

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

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

sudo sfdisk --no-reread ${DISK} <<-__EOF__
4M,,L,*
__EOF__

#unplug and plug SD card reader

sudo mkfs.ext4 -L rootfs -O ^metadata_csum,^64bit ${DISK}1

sudo mkdir -p /media/rootfs/
sudo mount ${DISK}1 /media/rootfs/

export kernel_version=5.15.177-bone43
sudo tar xfvp ./debian-*-*-armhf-*/armhf-rootfs-*.tar -C /media/rootfs/
sync

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

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

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}/

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

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

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

# addition begin
auto lo
iface lo inet loopback
 
auto eth0
iface eth0 inet dhcp
# addition end

sync
sudo umount /media/rootfs 

操作過程中的部份截圖如下所示。 

U-Boot開機載入程式建構完畢
Linux核心建構時的menuconfig;直接忽略
Linux核心建構時之處理器與記憶體等資源的耗用情況
Linux核心建構完畢
Debian Bullseye根檔案系統之封存檔案的解壓縮
以lsblk指令查詢SD卡對應的裝置名稱
設定SD卡,之1
設定SD卡,之2
以minicom序列埠工具程式來跟BeagleBone Black互動

完成。

 

參考文獻

https://forum.digikey.com/t/debian-getting-started-with-the-beaglebone-black/12967
https://engineer-leo.blogspot.com/2018/07/win10-vmware12-um1604-rpi2-sd-cross.html 

 

沒有留言:

張貼留言