(通过sd烧录官方镜像至emmc的教程,请参考网上教程,本文不做相关介绍,本文只做基于sd卡的uboot、kernel的移植)
实验准备:
1.一张microSD(TF)卡,类型为class 10,建议容量大于4G
2.BeagleBone Black Rev C(4G kingston EMMC)版一块
(2G eMMC版未做测试,阉割版BBB不适用于此文)
3.操作系统:ubuntu 18.04 64bit(已开启root用户模式,普通用户请sudo)
交叉编译器下载链接
链接:https://pan.baidu.com/s/14lPmUttyU2S_I1Qn3fjrKw
提取码:aa8j
#为注释
#/root
cd ~
#建立工程目录
mkdir Project
#源码下载目录
mkdir Projects/common
#工作目录
mkdir Projects/BBB
#
mkdir Projects/myfile
#下载交叉编译器,速度极慢
cd ~/Projects/myfile
wget -c https://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/arm-linux-gnueabihf/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf.tar.xz
#建立交叉编译器存放目录
mkdir /opt/linaro
#解压文件
tar -xvf gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf.tar.xz -C /opt/linaro/
#配置环境变量
vim ~/.bashrc
#在文本最后加入
export PATH=/opt/linaro/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf/bin/:$PATH
#使环境变量临时生效,只本终端可用
source ~/.bashrc
#或者重启生效
reboot
#下载uboot源码,建立本地副本
cd ~/Projects/common/
git clone --bare https://github.com/u-boot/u-boot
#下载完成后,拷贝至工作目录
cd ../BBB
git clone --reference ~/Projects/common/u-boot.git https://github.com/u-boot/u-boot
#进入u-boot目录
cd u-boot/
#查看当前版本
cat Makefile | less
---------------------------------------------------------------
# SPDX-License-Identifier: GPL-2.0+
VERSION = 2019
PATCHLEVEL = 04
SUBLEVEL =
EXTRAVERSION = -rc4
NAME =
---------------------------------------------------------------
#检出自己需要的版本,可检出版本可查看~/Projectscommon/u-boot.git/packed-refs文件
#本人检出版本为v2018.09
git checkout v2018.09 -b v2018.09
#下载相应版本的补丁,版本号请自行更改
wget -c https://rcn-ee.com/repos/git/u-boot-patches/v2018.09/0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch
wget -c https://rcn-ee.com/repos/git/u-boot-patches/v2018.09/0002-U-Boot-BeagleBone-Cape-Manager.patch
#打补丁
patch -p1 < 0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch
patch -p1 < 0002-U-Boot-BeagleBone-Cape-Manager.patch
#清除编译
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
#开始编译
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- am335x_evm_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
开始烧录uboot
首先插入microSD卡,建议使用读卡器
可以使用dmesg命令查看插入的设备的设备号,一般是sdb sdb1
建议先umount一下SD卡
umount /dev/sdb1
#如果有sdb2的话
umount /dev/sdb2
清除SD卡分区表
#注意设备号
dd if=/dev/zero of=/dev/sdb bs=1M count=10
分区前通过dd命令将文件拷贝至sd卡
#MLO文件必须第一个拷贝
dd if=MLO of=/dev/sdb count=1 seek=1 bs=128k
dd if=u-boot.img of=/dev/sdb count=2 seek=1 bs=384k
开始分区,需要判断sfdisk和mkfs.ext4版本,命令分别为:
sfdisk --version
mkfs.ext4 -V
此处可参考https://www.digikey.com/eewiki/display/linuxonarm/BeagleBone+Black
分区
#注意,请分次输入
#step 1
sfdisk /dev/sdb <<-__EOF__
#step 2
4M,,L,*
#step 3
__EOF__
格式化分区
mkfs.ext4 -L rootfs -O ^metadata_csum,^64bit /dev/sdb1
挂载sd卡新分区
mkdir /media/rootfs/
mount /dev/sdb1 /media/rootfs/
#备份
mkdir -p /media/rootfs/opt/backup/uboot
cp MLO /media/rootfs/opt/backup/uboot/
cp u-boot.img /media/rootfs/opt/backup/uboot/
#设置uboot参数
mkdir /media/rootfs/boot/
#拷贝uEnv.txt文件
cp uEnv.txt /media/rootfs/boot/
#卸载sd卡
umount /dev/sdb1
uEnv.txt可到https://github.com/giometti/gnu_linux_rapid_embedded_programming下载第一章
以下为其中内容
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};
断掉beaglebone black的电源,插入sd卡,按住usd键开机即可看到新的uboot引导信息
#根据日期Mar 31 2019判断,烧录uboot成功,最后启动的是emmc的系统
U-Boot SPL 2018.09-dirty (Mar 31 2019 - 23:28:55 +0800)
Trying to boot from MMC1
Loading Environment from EXT4... ** File not found /boot/uboot.env **
** Unable to read "/boot/uboot.env" from mmc0:1 **
U-Boot 2018.09-dirty (Mar 31 2019 - 23:28:55 +0800)
CPU : AM335X-GP rev 2.1
I2C: ready
DRAM: 512 MiB
No match for driver 'omap_hsmmc'
No match for driver 'omap_hsmmc'
Some drivers were not found
Reset Source: Power-on reset has occurred.
RTC 32KCLK Source: External.
MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1
Loading Environment from EXT4... ** File not found /boot/uboot.env **
** Unable to read "/boot/uboot.env" from mmc0:1 **
Board: BeagleBone Black
<ethaddr> not set. Validating first E-fuse MAC
BeagleBone Black:
BeagleBone: cape eeprom: i2c_probe: 0x54:
BeagleBone: cape eeprom: i2c_probe: 0x55:
BeagleBone: cape eeprom: i2c_probe: 0x56:
BeagleBone: cape eeprom: i2c_probe: 0x57:
Net: eth0: MII MODE
cpsw, usb_ether
Press SPACE to abort autoboot in 2 seconds
board_name=[A335BNLT] ...
board_rev=[00C0] ...
switch to partitions #0, OK
mmc0 is current device
SD/MMC found on device 0
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
gpio: pin 56 (gpio 56) value is 0
gpio: pin 55 (gpio 55) value is 0
gpio: pin 54 (gpio 54) value is 0
gpio: pin 53 (gpio 53) value is 1
switch to partitions #0, OK
mmc0 is current device
gpio: pin 54 (gpio 54) value is 1
Checking for: /uEnv.txt ...
Checking for: /boot.scr ...
Checking for: /boot/boot.scr ...
Checking for: /boot/uEnv.txt ...
gpio: pin 55 (gpio 55) value is 1
706 bytes read in 5 ms (137.7 KiB/s)
Loaded environment from /boot/uEnv.txt
Checking if uname_r is set in /boot/uEnv.txt...
** Invalid partition 2 **
** Invalid partition 3 **
** Invalid partition 4 **
** Invalid partition 5 **
** Invalid partition 6 **
** Invalid partition 7 **
switch to partitions #0, OK
mmc1(part 0) is current device
Scanning mmc 1:1...
gpio: pin 56 (gpio 56) value is 0
gpio: pin 55 (gpio 55) value is 0
gpio: pin 54 (gpio 54) value is 0
gpio: pin 53 (gpio 53) value is 1
switch to partitions #0, OK
mmc1(part 0) is current device
gpio: pin 54 (gpio 54) value is 1
Checking for: /uEnv.txt ...
Checking for: /boot.scr ...
Checking for: /boot/boot.scr ...
Checking for: /boot/uEnv.txt ...
gpio: pin 55 (gpio 55) value is 1
2099 bytes read in 6 ms (340.8 KiB/s)
Loaded environment from /boot/uEnv.txt
Checking if uname_r is set in /boot/uEnv.txt...
gpio: pin 56 (gpio 56) value is 1
Running uname_boot ...
loading /boot/vmlinuz-4.14.71-ti-r80 ...
10416640 bytes read in 664 ms (15 MiB/s)
debug: [enable_uboot_overlays=1] ...
debug: [enable_uboot_cape_universal=1] ...
debug: [uboot_base_dtb_univ=am335x-boneblack-uboot-univ.dtb] ...
uboot_overlays: [uboot_base_dtb=am335x-boneblack-uboot-univ.dtb] ...
uboot_overlays: Switching too: dtb=am335x-boneblack-uboot-univ.dtb ...
loading /boot/dtbs/4.14.71-ti-r80/am335x-boneblack-uboot-univ.dtb ...
161723 bytes read in 25 ms (6.2 MiB/s)
uboot_overlays: [fdt_buffer=0x60000] ...
uboot_overlays: loading /lib/firmware/BB-BONE-eMMC1-01-00A0.dtbo ...
1440 bytes read in 47 ms (29.3 KiB/s)
uboot_overlays: loading /lib/firmware/BB-HDMI-TDA998x-00A0.dtbo ...
5127 bytes read in 95 ms (51.8 KiB/s)
uboot_overlays: loading /lib/firmware/BB-ADC-00A0.dtbo ...
711 bytes read in 138 ms (4.9 KiB/s)
uboot_overlays: loading /lib/firmware/AM335X-PRU-RPROC-4-14-TI-00A0.dtbo ...
3513 bytes read in 146 ms (23.4 KiB/s)
loading /boot/initrd.img-4.14.71-ti-r80 ...
4799520 bytes read in 309 ms (14.8 MiB/s)
debug: [console=ttyO0,115200n8 bone_capemgr.uboot_capemgr_enabled=1 root=/dev/mmcblk1p1 ro rootfstype=ext4 rootwait coherent_pool=1M net.ifnames=0 quiet] ...
debug: [bootz 0x82000000 0x88080000:493c20 88000000] ...
## Flattened Device Tree blob at 88000000
Booting using the fdt blob at 0x88000000
reserving fdt memory region: addr=88000000 size=89000
Using Device Tree in place at 88000000, end 8808bfff
Starting kernel ...
[ 0.002115] timer_probe: no matching timers found
[ 1.141737] wkup_m3_ipc 44e11324.wkup_m3_ipc: could not get rproc handle
[ 1.442487] omap_voltage_late_init: Voltage driver support not added
[ 1.449482] PM: Cannot get wkup_m3_ipc handle
[ 1.644509] hdmi-audio-codec hdmi-audio-codec.0.auto: ASoC: no source widget found for Playback
[ 1.653475] hdmi-audio-codec hdmi-audio-codec.0.auto: ASoC: Failed to add route Playback -> direct -> TX
rootfs: recovering journal
rootfs: clean, 86183/233392 files, 535196/932864 blocks
Debian GNU/Linux 9 beaglebone ttyS0
BeagleBoard.org Debian Image 2018-10-07
Support/FAQ: http://elinux.org/Beagleboard:BeagleBoneBlack_Debian
default username:password is [debian:temppwd]
beaglebone login: