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进行编译,发现编译成功;

u-boot 移植(一)编译环境搭建的更多相关文章

  1. Tiny4412 开发板 编译环境搭建【转】

    本文转载自:http://blog.csdn.net/beijiwei/article/details/51055369 版权声明:本文为博主原创文章,未经博主允许不得转载. /*********** ...

  2. ubuntu12.04下安卓编译环境搭建总结

    前言:      因为工作需要,经常要编译安卓下的动态库,公司有已经搭建好环境的服务器,但是第一自己想自己搭建一下了解一个整个过程,另外,公司的服务器也经常出现问 题,导致编译不了,所以就想自己搭建环 ...

  3. windows下cocos2dx3.0开发环境及Android编译环境搭建

    cocos2dx更新到了3.x版本号,自己一直没有换,如今开发组要求统一换版本号,我就把搭建好开发环境的过程记录下来. 一.Windowns下开发环境搭建 1.  所需工具         1)coc ...

  4. Emscripten编译环境搭建--将C和C++编译成JS

    Emscripten编译环境搭建--将C和C++编译成JS 需求:linux环境下用js执行c.c++文件,使用emscirpten编译器 目标:搭建好Emscripten环境 环境:Ubuntu16 ...

  5. openwrt(一):openwrt源码下载及编译环境搭建

    声明:从网上各位大神的博客学习,整理后记录,非原创. 注:请用非root用户来下载源码 导航: 1. openwrt编译环境搭建 2. openwrt源码下载 3. feeds更新 1. openwr ...

  6. IoT设备程序开发及编译环境搭建初体验

    引言 Mirai事件一经曝出,立即引领了一轮研究IoT设备的热潮.目前,对Mirai的报告大多只是在对其功能实现上的介绍,却很少提及如何实现IoT设备程序开发的测试环境.本文在对Mirai的源码研究的 ...

  7. C语言编程入门之--第二章编译环境搭建

    第二章 编译环境搭建 导读:C语言程序如何工作,首先需要编译链接成可执行文件,然后就可以运行在不同的环境中,这个“环境”的意思就是比如说,电脑,手机,路由器,蓝牙音箱等等智能设备中,其中编译器启到了关 ...

  8. cocos2d-x之android编译环境搭建(第二篇)[版本号:cocos2d-x-3.1.1]

    基于 Android NDK 的学习之旅-----环境搭建 工欲善其事 必先利其器 , 以下介绍下 Eclipse SDK NDK Cygwin CDT 集成开发环境的搭建. 1.Android 开发 ...

  9. Pinpoint 编译环境搭建(Pinpoint系列一)

    本文基于 Pinpoint 2.1.0 版本 目录 一.2.1.0 版本特性 二.编译环境准备 三.编译注意事项 四.编译目录 五.注意事项 新版本的内容参考官方文档, Pinpoint的整个搭建是历 ...

随机推荐

  1. PIL库之图片处理

    (1)对图片生成缩略图 from PIL import Image im = Image.open("C:\Users\litchi\Desktop\picture1.jpg") ...

  2. 简谈” Top K“

    Top K 快速选择和堆排序都可以求解 Kth Element 和 TopK Elements 问题. 题见215. Kth Largest Element in an Array (Medium) ...

  3. 排序1 - 选择排序 & 插入排序

    请原谅我没有按照之前图片的分类来介绍排序算法,先说最简单的两种排序算法(冒泡略过),选择排序和插入排序,之前老是容易记混.默认输出升序的序列啊,哈哈. 选择排序 对于输入长度为n的数组,一共比较n-1 ...

  4. 大数据MapReduce相关的运维题

    1.在集群节点中/usr/hdp/2.4.3.0-227/hadoop-mapreduce/目录下,存在一个案例 JAR 包 hadoop-mapreduce-examples.jar.运行 JAR ...

  5. 在c++中引用c头文件里的函数

    在c++中有的时候想要引用c头文件里的函数有两种方法;就拿c语言里面的<stdlib.h>举例 在c中我们想要用<stdlib.h>里的函数,形式为:#include<s ...

  6. python学习笔记(五)---函数与类

    函数 def为定义函数的一个标志 demo1: def greet_user(username): print("Hello, " + username.title() + &qu ...

  7. tp5.1 依赖注入的使用

    参考:概念:https://blog.csdn.net/qq_36172443/article/details/82667427应用: http://www.cnblogs.com/finalandd ...

  8. php用户量剧增导致cpu100%解决办法

    在php扩展里边开启opcache扩展,此扩展是解析php的缓存机制,每次解析都要消耗cpu,所以有大量的fpm进程去占用cpu,开启此扩展之后cpu就瞬间下来了,只解析第一次,往后的都使用缓存.很好 ...

  9. 让Vagrant在Windwos下支持使用NFS/SMB共享文件夹从而解决目录共享IO缓慢的问题

    此问题是在拥有相同配置的环境中,项目在win10跑的慢而在win7就正常的情况下发现的,一步步调试之后发现是文件操作的相关行为变的很慢,于是考虑到可能是系统问题,后来在如下链接找到了解决办法:http ...

  10. Python学习15之python内置六大标准类型

    1.六大标准类型:数值型,str,list,set,tuple,dic 2.数值型:int,float,bool,complex 3.区别: 1)数值型和str,tuple都是不可变类型 而list, ...