Debian: 开始你的 BeagleBone Black

这篇文章基于 TI 的 Cortex-A8; BeagleBone Black

相关资源

开发板:

电源:

电缆:

基本要求

  • 在x86 64位PC上运行最近支持的Debian、Fedora或Ubuntu版本;没有操作系统虚拟化软件。

  • 列出的许多命令都假定/bin/bash为默认shell。

  • Kernel.org交叉编译器-Latest cross-compilers

  • 引导装载程序

  • Linux内核
  • 基于ARM的rootfs

学习

ARM 交叉编译器:GCC

这是一个在通用 linux 上运行的预构建(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

U-Boot–通用引导加载程序:The U-Boot Documentation — Das U-Boot unknown version documentation
根据你的Linux发行版,你还需要一个主机gcc和其他工具,所以在Debian/Ubuntu中,首先安装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}

Linux Kernel

该脚本将构建内核、模块、设备树二进制文件,并将它们复制到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 + Real-Time Linux):

#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 + Real-Time Linux):

#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 + Real-Time Linux):

#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:

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

对于TI v4.19.x: Real-Time

#~/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

根文件系统

Debian 11

用户 密码
debian temppwd
root root

下载:

@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来帮助找出为外部驱动器保留的linux设备。

#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__

格式化分区:
With 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

Mount 区分:
在大多数系统上这些分区可能是自动挂载的…

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”闪光脚本上使用。

#~/
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”完全按照你自己的构建/桌面环境中显示的那样,然后按回车键创建一个环境变量以供以后使用。

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"

复制Kernel Image

Kernel Image:

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

复制Kernel Device Tree Binaries

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

复制Kernel Modules

#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

本节假设你已经安装了你最喜欢的基于xorg的窗口管理器,如lxde, xfce, kde, gnome等,这些都是需要安装在你选择的窗口管理器上的包,以及正确设置视频界面所需的xorg.conf。
注意 : 如果光标没有立即显示,首先按 :ctlr-alt-f1 ,然后按 :ctrl-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 (over serial/ssh)

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

eMMC

将microSD卡复制到eMMC的脚本:(这将需要安装这些包:initramfs-tools dosstools 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覆盖

完整文档:[readme|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 VIDEO & AUDIO:

#/boot/uEnv.txt
disable_uboot_overlay_video=1

禁用: HDMI AUDIO:

#/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:覆盖检测到的capes

#/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:禁用自动加载检测到的capes

#/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个未被发现的capes

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

最后

如有任何问题或意见,请访问我们的技术论坛:技术论坛