orangepi one H3 u-boot/kernel编译


1. 相关文件下载链接

交叉编译工具链:https://github.com/orangepi-xunlong/toolchain
uboot:https://github.com/orangepi-xunlong/toolchain
kernel:https://github.com/orangepi-xunlong/linux-orangepi
编译环境:
	基于ubuntu20.04的vmwarea虚拟机:
	用户名密码:work/work、root/root
	虚拟机静态IP:192.168.5.239/255.255.0.0/桥接
	虚拟机安装的服务服务有:
	1)ssh,用于远程登录
	2)samba,用于windows直接访问虚拟机目录(无密码登录,输入 \\192.168.5.239\home)
	3) vmware-tools,用于在虚拟机里面访问windows目录

2. 安装toolchain

在这里插入图片描述

如上图解压后,运行如下命令,让编译工具链生效:
export PATH=$PATH:/home/work/orangepi_one/toolchain-master/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf/bin
export CROSS_COMPILE=arm-linux-gnueabihf-
export CROSS=arm-linux-gnueabihf-
export CC=arm-linux-gnueabihf-gcc
export CXX=arm-linux-gnueabihf-g++
export AR=arm-linux-gnueabihf-ar
export RANLIB=arm-linux-gnueabihf-ranlib
export STRIP=arm-linux-gnueabihf-strip
export LD=arm-linux-gnueabihf-ld

3. 编译u-boot

cd u-boot-orangepi-2020.04
# 清除编译过程文件
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
# 生成OrangePi One的默认配置
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- orangepi_one_defconfig
# 编译 
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

备注:
ARCH = ?			CPU的架构
CROSS_COMPILE = ?	使用的编译工具链头

配置uboot功能(一般不用)
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
在u-boot-orangepi-2020.04目录下添加了一个编译脚本build_orange_one.sh,内容如下:
#!/bin/sh

echo ""
echo "build orangepi one u-boot......"
echo ""

#make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- clean
#make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- orangepi_one_defconfig
#make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
cp config_orangepi_one .config
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

if [ $? -eq 0 ]; then
	echo "build orangepi one u-boot success"
else
	echo "build orangepi one u-boot fail"
fi

编译出来的文件是:u-boot-sunxi-with-spl.bin

4. 烧录u-boot

将开发板上的SD卡通过读卡器接入到虚拟机中,进入u-boot目录,执行如下命令:

sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdb bs=1024 seek=8

备注:我的是/dev/sdb,有可能是sdc等,根据实际情况修改。

5. 运行u-bot情况

板和电脑的连接如下:
在这里插入图片描述
串口只用连接RX、TX、GND三根线。

运行后串口看到如下信息,说明u-boot烧录成功:
在这里插入图片描述

6. 编译kernel

tar -zxvf linux.tar.gz
编译确认toolchain已经配置好。
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean 
# 生成内核的板级配置,对应于arch/arm/configs/sunxi_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- sunxi_defconfig
# 编译
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

备注:
# 配置内核功能
make menuconfig ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
在linux-orangepi-orange-pi-5.4目录下添加了一个编译脚本build_orange_one.sh,内容如下:
#!/bin/sh

echo ""
echo "build orangepi one kernel......"
echo ""

#make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- clean
#make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- sunxi_defconfig
#make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
cp config_orangepi_one .config
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

if [ $? -eq 0 ]; then
	echo "build orangepi one kernel success"
else
	echo "build orangepi one kernel fail"
fi

生成的内核和设备树路径是:
arch/arm/boot/zImage
arch/arm/boot/dts/sun8i-h3-orangepi-pc.dtb

7 kernel烧录、运行

烧录:
将TF卡接入PC电脑,直接将生成的zImage和sun8i-h3-orangepi-pc.dtb放到TF止顶层目录,我这里没有将TF卡分区
修改uboot环境变量:
setenv bootcmd 'load mmc 0:1 0x43000000 sun8i-h3-orangepi-pc.dtb; load mmc 0:1 0x42000000 zImage; bootz 0x42000000 - 0x43000000';saveenv

如下图,跑到文件系统会卡住,因为没有烧录文件系统。
在这里插入图片描述

8 编译过程中遇到的问题

问题1:libz.so.1: cannot open shared object file: No such file or directory
解决:apt-get install lib32z1

问题2:dtc: command not found
解决:apt install device-tree-compiler

问题3:mkimage: command not found
解决:apt install u-boot-tools

问题4/usr/bin/env: ‘python2’: No such file or directory
解决:sudo apt-get install python2
	
问题5/bin/sh: 1: bison: not found
解决:sudo apt-get install bison -y
	
问题6/bin/sh: 1: flex: not found
解决:sudo apt-get install flex -y

问题7:ModuleNotFoundError: No module named 'distutils.core'
解决:sudo apt-get install python3-pip
	
问题8:unable to execute 'swig': No such file or directory
解决:sudo apt install swig

安装的其它包:
	sudo apt-get install libncurses5-dev
问题9:u-boot运行时报错,Loading Environment from FAT... *** Warning - bad CRC, using default environment
解决:在u-boot命令行运行saveenv

9. 参考

香橙派One(全志H3芯片)编译烧写U-boot、Linux内核zImage、dtb

Logo

昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链

更多推荐