相關資料:
(二)uboot移植--從零開始自制linux掌上電腦(F1C200S)<嵌入式項目>-CSDN博客
F1C200S挖坑日記(3)——Uboot編譯篇_f1c200s uboot-CSDN博客
一、安裝編譯器
Linaro Releases
具體下載鏈接
https://releases.linaro.org/components/toolchain/binaries/7.2-2017.11/arm-linux-gnueabi/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar.xz
下載完成之后如下
我們解壓后進入其目錄/bin目錄下,內容如下
記錄一下當前的目錄
例如我
/home/nanqiu/Desktop/f10c200/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi/bin
二、uboot移植
1、下載
這里使用的是荔枝派維護的uboot
git clone https://github.com/Lichee-Pi/u-boot.git
下載完成,可以看到
我們進入目錄下,然后切換分支
git checkout nano-v2018.01
2、項目配置
2.1、進行配置
然后運行命令,進行配置,其中CROSS_COMPIL的值為編譯器目錄/arm-linux-gnueabi-
其實這里可以修改makefile,但是我的環境里有好多個版本的arm-linux-gnueabi-編譯器,于是我就直接指定目錄了
make ARCH=arm CROSS_COMPILE=/home/nanqiu/Desktop/f10c200/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi- licheepi_nano_defconfig
如果輸入錯誤可以使用以下命令清除配置
make ARCH=arm distclean
2.2、 圖形界面配置
make menuconfig ARCH=arm CROSS_COMPILE=/home/nanqiu/Desktop/f10c200/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-
上下鍵進行移動,空格進行選定/取消
勾選Enable boot arguments
選擇Boot arguments選項,選中回車輸入以下內容后回車保存。
console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 earlyprintk rw
找到bootcmd,輸入
load mmc 0:1 0x80008000 zImage;load mmc 0:1 0x80c08000 suniv-f1c100s-licheepi-nano.dtb;bootz 0x80008000 - 0x80c08000;
設置完成之后,我們進行保存
3、編譯
make ARCH=arm CROSS_COMPILE=/home/nanqiu/Desktop/f10c200/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi- -j8
3.1、解決問題
3.1.1、multiple definition of `yylloc'
報錯信息如下
usr/bin/ld: scripts/dtc/dtc-parser.tab.o:(.bss+0x10): multiple definition of `yylloc'; scripts/dtc/dtc-lexer.lex.o:(.bss+0x0): first defined here
CHK include/generated/generic-asm-offsets.h
collect2: error: ld returned 1 exit status
make[2]: *** [scripts/Makefile.host:108: scripts/dtc/dtc] Error 1
make[2]: *** Waiting for unfinished jobs....
CHK include/config.h
CFG u-boot.cfg
scripts/dtc/pylibfdt/libfdt_wrap.c:154:11: fatal error: Python.h: No such file or directory
154 | # include
| ^~~~~~~~~~
compilation terminated.
解決方法為
我們使用vscode 打開當前目錄,找到如下文件./scripts/dtc/dtc-parser.tab.c找到1205行
注釋掉YYLTYPE yylloc,然后進行保存,重新編譯
3.1.2、 fatal error: Python.h:
報錯信息
scripts/dtc/pylibfdt/libfdt_wrap.c:154:11: fatal error: Python.h: No such file or directory
154 | # include
| ^~~~~~~~~~
compilation terminated.
解決方法
1.安裝python2
sudo apt update sudo apt install python2.7-dev -y
2.驗證安裝結果
python --version
3.1.3、Error: arch/arm/dts/.suniv-f1c100s-licheepi-nano.dtb.pre.tmp:59.1-10 syntax error
報錯信息
Error: arch/arm/dts/.suniv-f1c100s-licheepi-nano.dtb.pre.tmp:59.1-10 syntax error
FATAL ERROR: Unable to parse input tree
make[2]: *** [scripts/Makefile.lib:329: arch/arm/dts/suniv-f1c100s-licheepi-nano.dtb] Error 1
make[1]: *** [dts/Makefile:51: arch/arm/dts/suniv-f1c100s-licheepi-nano.dtb] Error 2
make: *** [Makefile:876: dts/dt.dtb] Error 2
make: *** Waiting for unfinished jobs....
解決方法
進入文件scripts/Makefile.lib,找到321行,將這個斜杠刪除,保存,重新編譯
3.1.4、ImportError: No module named _libfdt
報錯信息
Traceback (most recent call last):
File "./tools/binman/binman", line 32, in
import control*
File "/home/nanqiu/Desktop/f10c200/u-boot/tools/binman/control.py", line 16, in
import fdt
File "/home/nanqiu/Desktop/f10c200/u-boot/tools/binman/../dtoc/fdt.py", line 13, in
import libfdt
File "scripts/dtc/pylibfdt/libfdt.py", line 15, in
import _libfdt
ImportError: No module named _libfdt
make: *** [Makefile:1148: u-boot-sunxi-with-spl.bin] Error 1
解決方法
1.安裝python2
sudo apt update sudo apt install python2.7-dev -y
2.驗證安裝結果
python --version
4.編譯通過
源碼目錄下可以看到該文件,即編譯完成的可執行文件
三、燒錄
1.燒錄
將TF卡格式化為FAT32格式,然后連接ubuntu
使用如下命令繼續將uboot燒錄進TF卡
sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdb bs=1024 seek=8