摘要
本文概要介紹在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
沒有留言:
張貼留言