u-boot 移植(一)编译环境搭建

举报
小麦大叔 发表于 2022/01/01 00:20:07 2022/01/01
【摘要】 u-boot 移植(一)编译环境搭建 soc:s3c2440 board:jz2440 uboot:u-boot-2016.11 toolchain:gcc-linaro-7.4.1-2019.02-x...

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

  
 
  • 1
  • 2
  • 3

至此,我们已经进入到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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

无法编译通过,因为当前系统默认的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

  
 
  • 1
  • 2
  • 3

完成上述指令后,/opt/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi/路径就是我们的工具链的根路径;
但是这里不打算通过设置环境变量,而是编写一个编译脚本,在脚本里对环境变量进行临时设置;

vi mk.sh

  
 
  • 1

内容如下:

#!/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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

按下Esc键,然后输入:wq进行保存;
chmod 777 mk.sh为脚本赋予可执行权限;

./mk.sh #进行编译

  
 
  • 1

这时候会发现一个报错如下所示:

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

  
 
  • 1
  • 2
  • 3

大概是 ld的bug,需要修改Makefile,具体可以参考这个解决方案,或者降低工具链的版本,可以使用版本6.2-2016.11,经过测试可行。

重新执行mk.sh进行编译,发现编译成功;
在这里插入图片描述

文章来源: great.blog.csdn.net,作者:小麦大叔,版权归原作者所有,如需转载,请联系作者。

原文链接:great.blog.csdn.net/article/details/94448211

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。