制作更新BeagleBone-Black的Bootloader内核和文件系统

本文详细介绍了如何为 BeagleBone Black 设置 ARM 交叉编译器、Bootloader 和 Linux 内核等,同时提供了 Debian 和 Ubuntu 的根文件系统安装教程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本博客翻译自:https://www.eewiki.net/display/linuxonarm/BeagleBone%20Black


本博客翻译中会将原文的错误加以纠正。

基本要求:

ARM 交叉编译器: GCC

这是一个32位预编译的工具链,如果你的发行版为64位系统,请确保安装了32位库,安装方法如下表所示:

基于Debian (deb)

extra

pkgs: (sudo apt-get update ; sudo apt-get install xyz)

Ubuntu 14.04 -> 14.10

 

libc6:i386 libstdc++6:i386 libncurses5:i386 zlib1g:i386

Debian 7 -> 8 (Jessie)

sudo dpkg --add-architecture i386

libc6:i386 libstdc++6:i386 libncurses5:i386 zlib1g:i386

基于RedHat (rpm)

extra

pkgs: (yum install xyz)

Red Hat/Centos/Fedora

 

libstdc++.i686 ncurses-devel.i686 zlib.i686

下载/解压:

~/
wget -c https: //releases.linaro.org/14.09/components/toolchain/binaries/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz
tar xf gcc-linaro-arm-linux-gnueabihf- 4.9 - 2014 .09_linux.tar.xz
export CC=`pwd`/gcc-linaro-arm-linux-gnueabihf- 4.9 - 2014 .09_linux/bin/arm-linux-gnueabihf-

测试: 如果未通过测试, 确认你的系统是否正确安装32位库.

~/
${CC}gcc --version
arm-linux-gnueabihf-gcc (crosstool-NG linaro- 1.13 . 1 - 4.9 - 2014.09  - Linaro GCC  4.9 - 2014.09 4.9 . 2  20140904  (prerelease)
Copyright (C)  2014  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.

Bootloader: U-Boot

Das U-Boot -- 通用的Bootloader http://www.denx.de/wiki/U-Boot

下载:

~/
git clone git: //git.denx.de/u-boot.git
cd u-boot/
git checkout v2014. 10  -b tmp

补丁:

~/u-boot
wget -c https: //raw.githubusercontent.com/eewiki/u-boot-patches/master/v2014.10/0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch
patch -p1 <  0001 -am335x_evm-uEnv.txt-bootz-n-fixes.patch

配置和编译:

~/u-boot
make ARCH=arm CROSS_COMPILE=${CC} distclean
make ARCH=arm CROSS_COMPILE=${CC} am335x_evm_defconfig
make ARCH=arm CROSS_COMPILE=${CC}

升级发行版中的Device Tree 编译工具包

~/
wget -c https: //raw.github.com/RobertCNelson/tools/master/pkgs/dtc.sh
chmod +x dtc.sh
./dtc.sh

Linux 内核

这个脚本将会编译内核和模块,并将它们拷贝至 deploy 目录.

主线内核

下载:

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

切出 v3.8.x 分支 (支持所有Cape):

~/bb-kernel
git checkout origin/am33x-v3. 8  -b tmp

或切出 v3.18.x 分支 (支持SGX 并且对 usb & ethernet有更好的支持):

~/bb-kernel
git checkout origin/am33x-v3. 18  -b tmp

TI BSP

警告: 如果你没有经常rebase你分支的习惯, 由于该源码是基于 http://git.ti.com/gitweb/?p=ti-linux-kernel/ti-linux-kernel.git;a=shortlog;h=refs/heads/ti-linux-3.14.y,是稳定内核的一个替代. 因此你必须经常做如下操作: (git checkout master -f ; git branch -D tmp ; git pull ; git checkout origin/ti-linux-3.14.y -b tmp) .

下载:

~/
git clone https: //github.com/RobertCNelson/ti-linux-kernel-dev/
cd ti-linux-kernel-dev/
~/ti-linux-kernel-dev
git checkout origin/ti-linux- 3.14 .y -b tmp

编译:

~/ti-linux-kernel-dev
./build_kernel.sh

根文件系统

Debian 7

User

Password

debian

temppwd

root

root

这个镜像包含Systemd: https://wiki.debian.org/systemd, 打开systemd,添加下列参数到uEnv.txt:

optargs=quiet init=/lib/systemd/systemd

下载:

~/
wget -c https: //rcn-ee.net/deb/minfs/wheezy/debian-7.7-minimal-armhf-2014-11-10.tar.xz

验证:

~/
md5sum debian- 7.7 -minimal-armhf- 2014 - 11 - 10 .tar.xz
edee8eef5fa47ed2427a01ddf2f726c8  debian- 7.7 -minimal-armhf- 2014 - 11 - 10 .tar.xz

解压:

~/
tar xf debian- 7.7 -minimal-armhf- 2014 - 11 - 10 .tar.xz
Debian 8 (pre-release)

User

Password

debian

temppwd

root

root

下载:

~/
wget -c https: //rcn-ee.net/deb/minfs/jessie/debian-jessie-minimal-armhf-2014-11-10.tar.xz

验证:

~/
md5sum debian-jessie-minimal-armhf- 2014 - 11 - 10 .tar.xz
09e703c97167a4d072b44c54dc00b784  debian-jessie-minimal-armhf- 2014 - 11 - 10 .tar.xz

解压:

~/
tar xf debian-jessie-minimal-armhf- 2014 - 11 - 10 .tar.xz
Ubuntu 14.04.1

User

Password

ubuntu

temppwd

下载:

~/
wget -c https: //rcn-ee.net/deb/minfs/trusty/ubuntu-14.04.1-minimal-armhf-2014-11-10.tar.xz

验证:

~/
md5sum ubuntu- 14.04 . 1 -minimal-armhf- 2014 - 11 - 10 .tar.xz
7e5fa3cb4814f195d75cbaad6d922090  ubuntu- 14.04 . 1 -minimal-armhf- 2014 - 11 - 10 .tar.xz

解压:

~/
tar xf ubuntu- 14.04 . 1 -minimal-armhf- 2014 - 11 - 10 .tar.xz

根文件系统 (精简版)

64M大小的根文件系统, 适用于烧写应用.

Debian 7 (small flash)

User

Password

debian

temppwd

root

root

下载:

~/
wget -c https: //rcn-ee.net/deb/barefs/wheezy/debian-7.7-bare-armhf-2014-11-10.tar.xz

验证:

~/
md5sum debian- 7.7 -bare-armhf- 2014 - 11 - 10 .tar.xz
f8f221d7336e4cea5325d9e151a46c72  debian- 7.7 -bare-armhf- 2014 - 11 - 10 .tar.xz

解压: 

~/
tar xf debian- 7.7 -bare-armhf- 2014 - 11 - 10 .tar.xz

设置 microSD/SD 卡

对于下面的指令, 我们假设: DISK=/dev/mmcblk0, 对于决定设备ID, "lsblk" 是非常有用的.

export DISK=/dev/mmcblk0

擦除 microSD/SD 卡:

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

安装 Bootloader:

~/
sudo dd  if =./u-boot/MLO of=${DISK} count= 1  seek= 1  conv=notrunc bs=128k
sudo dd  if =./u-boot/u-boot.img of=${DISK} count= 2  seek= 1  conv=notrunc bs=384k

创建分区:

sudo sfdisk --in-order --Linux --unit M ${DISK} <<-__EOF__
1 ,, 0x83 ,*
__EOF__

格式化分区:

for : DISK=/dev/mmcblk0
sudo mkfs.ext4 ${DISK}p1 -L rootfs
 
for : DISK=/dev/sdX
sudo mkfs.ext4 ${DISK} 1  -L rootfs

挂载分区:

在一些系统上, 这些分区可能会自动被挂载...

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

备份 Bootloader

复制 MLO/u-boot.img 到boot目录

~/
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.img /media/rootfs/opt/backup/uboot/

处理eMMC中老的bootloader

如果你不想清除eMMC中的老的bootloader,添加下面uEnv.txt到 /media/rootfs/ 中

~/uEnv.txt
##This will work with: Angstrom's  2013.06 . 20  u-boot.
 
loadaddr= 0x82000000
fdtaddr= 0x88000000
rdaddr= 0x88080000
 
initrd_high= 0xffffffff
fdt_high= 0xffffffff
mmcroot=/dev/mmcblk0p1
 
loadximage=load mmc  0 : 1  ${loadaddr} /boot/vmlinuz-${uname_r}
loadxfdt=load mmc  0 : 1  ${fdtaddr} /boot/dtbs/${uname_r}/${fdtfile}
loadxrd=load mmc  0 : 1  ${rdaddr} /boot/initrd.img-${uname_r}; setenv rdsize ${filesize}
loaduEnvtxt=load mmc  0 : 1  ${loadaddr} /boot/uEnv.txt ; env  import  -t ${loadaddr} ${filesize};
loadall=run loaduEnvtxt; run loadximage; run loadxfdt;
 
mmcargs=setenv bootargs console=tty0 console=${console} ${optargs} ${cape_disable} ${cape_enable} root=${mmcroot} rootfstype=${mmcrootfstype} ${cmdline}
 
uenvcmd=run loadall; run mmcargs; bootz ${loadaddr} - ${fdtaddr};
~/
sudo cp -v ./uEnv.txt /media/rootfs/

安装内核和根文件系统

由于内核版本每天都可能有变化,为了帮助新的用户,本页列出的内核编译脚本将会给出你所编译内核的版本。

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

复制并粘贴你自己编译环境中显示的"export kernel_version=3.X.Y-Z"确切信息,然后按回车键创建一个环境变量,这个变量随后会用到。

export kernel_version= 3 .X.Y-Z

复制根文件系统

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

创建 /boot/uEnv.txt

提示:使用开发板对应的Device Tree文件,下面以操作以BeagleBone-Black为例,所以fdtfile=am335x-boneblack.dtb。

~/
sudo mkdir -p /media/rootfs/boot/
sudo sh -c  "echo 'uname_r=${kernel_version}' > /media/rootfs/boot/uEnv.txt"
sudo sh -c  "echo 'fdtfile=am335x-boneblack.dtb' > /media/rootfs/boot/uEnv.txt"

Debian /boot/uEnv.txt (启用 systemd)

~/
sudo sh -c  "echo 'cmdline=quiet init=/lib/systemd/systemd' >> /media/rootfs/boot/uEnv.txt"

复制内核文件

Kernel Image:

~/
mainline:
sudo cp -v ./bb-kernel/deploy/${kernel_version}.zImage /media/rootfs/boot/vmlinuz-${kernel_version}
 
bsp:
sudo cp -v ./ti-linux-kernel-dev/deploy/${kernel_version}.zImage /media/rootfs/boot/vmlinuz-${kernel_version}

内核 Device Tree 二进制文件:

~/
sudo mkdir -p /media/rootfs/boot/dtbs/${kernel_version}/
 
mainline:
sudo tar xfv ./bb-kernel/deploy/${kernel_version}-dtbs.tar.gz -C /media/rootfs/boot/dtbs/${kernel_version}/
 
bsp:
sudo tar xfv ./ti-linux-kernel-dev/deploy/${kernel_version}-dtbs.tar.gz -C /media/rootfs/boot/dtbs/${kernel_version}/

内核模块:

~/
mainline:
sudo tar xfv ./bb-kernel/deploy/${kernel_version}-modules.tar.gz -C /media/rootfs/
 
bsp:
sudo tar xfv ./ti-linux-kernel-dev/deploy/${kernel_version}-modules.tar.gz -C /media/rootfs/

文件系统表 (/etc/fstab)

/etc/fstab
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

网络: 多个BeagleBone共享同一张SD卡

 总是启用Ethernet接口作为 eth0.

编辑文件: /etc/udev/rules.d/70-persistent-net.rules

sudo nano /media/rootfs/etc/udev/rules.d/ 70 -persistent-net.rules

添加:

/etc/udev/rules.d/70-persistent-net.rules
# BeagleBone: net device ()
SUBSYSTEM== "net" , ACTION== "add" , DRIVERS== "?*" , ATTR{dev_id}== "0x0" , ATTR{type}== "1" , KERNEL== "eth*" , NAME= "eth0"

串口登录

Debian

/etc/inittab
sudo sh -c  "echo 'T0:23:respawn:/sbin/getty -L ttyO0 115200 vt102' >> /media/rootfs/etc/inittab"

Ubuntu

创建新文件: /etc/init/serial.conf

sudo nano /media/rootfs/etc/init/serial.conf

添加如下内容:

/etc/init/serial.conf
start on stopped rc RUNLEVEL=[ 2345 ]
stop on runlevel [! 2345 ]
 
respawn
exec /sbin/getty  115200  ttyO0

 从主机上移除 microSD/SD 卡:

sync
sudo umount /media/rootfs

usb gadget

支持通过usb使用http访问BeagleBone-Black.

安装 udhcpd

sudo apt-get install udhcpd

编辑: /etc/network/interfaces 并添加如下内容:

/etc/network/interfaces
# Ethernet/RNDIS gadget (g_ether)
# ... or on host side, usbnet and random hwaddr
iface usb0 inet  static
     address  192.168 . 7.2
     netmask  255.255 . 255.0
     network  192.168 . 7.0
     gateway  192.168 . 7.1

临时脚本:

wget -c https: //raw.github.com/RobertCNelson/tools/master/scripts/beaglebone-black-g-ether-load.sh
chmod +x beaglebone-black-g-ether-load.sh
sudo ./beaglebone-black-g-ether-load.sh

HDMI

本段内容假设你已经安装你最喜欢的基于xorg的窗口管理器,例如lxde,xfce,kde,gnome等等。有一些安装包需要在你选择窗口管理器之前被安装,并且需要一个xorg.conf配置文件来正确的设置视频接口。

提示: 如果光标没有立即显示出来,首先按下 ctlr-alt-f1 ,然后: ctrl-alt-f7 ,此后光标应该已经显示...

确定已经安装, modesetting 驱动 和 xrandr 工具:

sudo apt-get update
sudo apt-get install read-edid xserver-xorg-video-fbdev xserver-xorg-video-modesetting x11-xserver-utils
/etc/X11/xorg.conf
Section  "Monitor"
         Identifier       "Builtin Default Monitor"
EndSection
Section  "Device"
         Identifier       "Builtin Default fbdev Device 0"
         Driver           "fbdev"
#        Driver           "modesetting"
EndSection
Section  "Screen"
         Identifier       "Builtin Default fbdev Screen 0"
         Device           "Builtin Default fbdev Device 0"
         Monitor          "Builtin Default Monitor"
         DefaultDepth     16
#Chipsee lcd7 bbb-exp-c:
#        DefaultDepth     24
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

 

SGX

编译 SGX 模块/用户空间程序 (必须在x86系统上做这些操作,这是因为 TI 5.01.01.01 blob extractor)

~/bb-kernel
./sgx_build_modules.sh

复制 ./deploy/GFX_5.01.01.01.tar.gz 到 BeagleBone/BeagleBone Black 并安装

sudo tar xfv GFX_5. 01.01 . 01 .tar.gz -C /
cd /opt/gfxinstall/
sudo ./sgx-install.sh
sudo reboot

验证 omaplfb & pvrsrvkm模块是否加载

debian @arm :~$ lsmod | grep omaplfb
omaplfb                 12065   0
pvrsrvkm               178782   1  omaplfb

SGX Demos

cd /opt/gfxsdkdemos/ogles2/
./OGLES2ChameleonMan

常见问题(FAQ)

BeagleBone Black Angstrom usb 网络加载失败

dmesg 将出现类似如下错误:

[     5.179269 ] g_multi: ` ' invalid for parameter `C7'

原因:

hexdump有个功能,就是将重复字符替换为*, 因此读出来的MAC地址不正确:

hexdump -e  '1/1 "%02X" ":"'  /proc/device-tree/ocp/ethernet @4a100000 /slave @4a100300 /mac-address
90 : 59 :AF:5C:*
C7:root @beaglebone :~#
hexdump -v -e  '1/1 "%02X" ":"'  /proc/device-tree/ocp/ethernet @4a100000 /slave @4a100300 /mac-address
90 : 59 :AF:5C:5C:C7:root @beaglebone :~#
/usr/bin/g-ether-load.sh
mac_address= "/proc/device-tree/ocp/ethernet@4a100000/slave@4a100300/mac-address"
if  [ -f ${mac_address} ] ; then
     DEV_ADDR=$(hexdump -e  '1/1 "%02X" ":"'  ${mac_address} | sed  's/.$//' )
else

添加一个 "-v" 到hexdump调用中.

/usr/bin/g-ether-load.sh
mac_address= "/proc/device-tree/ocp/ethernet@4a100000/slave@4a100300/mac-address"
if  [ -f ${mac_address} ] ; then
     DEV_ADDR=$(hexdump -v -e  '1/1 "%02X" ":"'  ${mac_address} | sed  's/.$//' )
else

补丁通告:

https://github.com/beagleboard/meta-beagleboard/pull/12


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值