BeagleBone uboot编译

(通过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:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值