u-boot 移植(一)編譯環境搭建

u-boot 移植(一)編譯環境搭建

soc:s3c2440
board:jz2440
ubootu-boot-2016.11
toolchaingcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi

前言

在學習了韋東山老師的JZ2400之前相關的教程,以及uboot移植的視頻之後,打算自己嘗試移植一下最新版本的uboot,但是發現,s3c2440的支持在uboot-2017.1的版本時就已經被移除了,所以選擇了一個最新支持s3c2440的版本u-boot-2016.11,這個版本有對於smdk2410的板級支持,所以可以參考2410進行移植,可以減少一部分工作量。

依賴包安裝

虛擬機的ubuntu環境搭建,可以參考這篇文章,後面進行源碼配置和編譯的時候可以會提示缺少一些工具,所以在Ubuntu16.04 64bit系統下安裝以下這些包,應該是不會出現什麼問題;

apt-get update
apt-get install build-essential -y
apt-get install libncurses5-dev -y
apt-get install bison -y
apt-get install flex -y
apt-get install autoconf -y

u-boot 源碼

在瀏覽器上通過搜索引擎下載文件,也可以通過wget下載,可能鏈接會更新失效,那時候,還得重新一下;

wget http://ftp.denx.de/pub/u-boot/u-boot-2016.11.tar.bz2
tar -xvf u-boot-2016.11.tar.bz2
cd u-boot-2016.11

至此,我們已經進入到u-boot源碼路徑下了。在這裏,我們可以通過make menuconfig通過圖形界面的方式對u-boot進行配置;如下所示
在這裏插入圖片描述
當然,有一部分板級的配置已經保存到configs路徑下,可以找到smdk2410_defconfig,可以執行make smdk2410_defconfig將這個文件裏的配置寫入到.config中;
在這裏插入圖片描述
總體的編譯指令如下兩條,但是這時候編譯會出現報錯;

make smdk2410_defconfig
make

# output make error information
lib/asm-offsets.c:1:0: error: bad value (armv4t) for -march= switch
 /*
 ^
Kbuild:43: recipe for target 'lib/asm-offsets.s' failed
make[1]: *** [lib/asm-offsets.s] Error 1
Makefile:1285: recipe for target 'prepare0' failed
make: *** [prepare0] Error 2

無法編譯通過,因爲當前系統默認的gcc編譯器無法支持armv4t這個架構,所以下面還得設置一下工具鏈;

交叉編譯環境搭建

這裏,我比較推薦Linaro上的工具鏈,找到一個比較新的版本,然後直接配置,本文直接下載gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi.tar.xz

sudo wget https://releases.linaro.org/components/toolchain/binaries/7.4-2019.02/arm-linux-gnueabi/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi.tar.xz
sudo cp gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi.tar.xz /opt
sudo tar -xvf gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi.tar.xz

完成上述指令後,/opt/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi/路徑就是我們的工具鏈的根路徑;
但是這裏不打算通過設置環境變量,而是編寫一個編譯腳本,在腳本里對環境變量進行臨時設置;

vi mk.sh

內容如下:

#!/bin/bash
TOOLCHAIN=/opt/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi/bin
export ARCH=arm
export PATH=$TOOLCHAIN:$PATH
export CROSS_COMPILE=arm-linux-gnueabi-
make smdk2410_defconfig
make -j4

按下Esc鍵,然後輸入:wq進行保存;
chmod 777 mk.sh爲腳本賦予可執行權限;

./mk.sh #進行編譯

這時候會發現一個報錯如下所示:

arm-linux-gnueabi-ld.bfd: u-boot: Not enough room for program headers, try linking with -N
arm-linux-gnueabi-ld.bfd: final link failed: Bad value
Makefile:1208: recipe for target 'u-boot' failedl

大概是 ld的bug,需要修改Makefile,具體可以參考這個解決方案,或者降低工具鏈的版本,可以使用版本6.2-2016.11,經過測試可行。

重新執行mk.sh進行編譯,發現編譯成功;
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章