一、工具链的制作

1.1 工具

  软件工具:crosstool-ng

  下载地址:git clone https://github.com/crosstool-ng/crosstool-ng

  crosstool-ng的环境需要libncurse5-dev

  sudo apt-get install libncurse5-dev

  安装autoconf:  sudo apt-get install autoconf

  进入crosstool-ng目录,执行./bootstrap,生成 configure 执行文件

  检查安装环境,报什么错,就安装什么软件:./configure --prefix=`pwd`/crosstool 

  需要的软件有:

  sudo apt-get install gperf bison flex texinfo help2man gawk

  执行命令 make执行命令:

  make install

  export PATH="${PATH}:`pwd`/crosstool/bin"

1.2 开始制作

1.2.1 建立目标文件夹

  根目录下建立三个文件夹:

  mkdir src x-tools crosstool

  

1.2.2 环境

  进入crosstool目录:cd ~/.crosstool

  执行:ct-ng list-samples

  

  选择arm-unknown-linux-gnueabi 作为交差编译工具链的模版

  执行命令:ct-ng show-arm-unknown-linux-gnueabi,查看编译交差编译工具链所需要的配置

  

  下载gcc 6.3.0:wget http://ftp.gnu.org/gnu/gcc/gcc-6.3.0/gcc-6.3.0.tar.gz

  

  执行命令:ct-ng arm-unknown-linux-gnueabi

  

  执行命令:ct-ng menuconfig

  

  

  选择 Target options

             *** Target optimisations ***
           (armv4t) Architecture level :指令集架构,exynos4412为armv7-a架构,-march=name
           (arm920t) Emit assembly for CPU  :CPU核心类型,  -mcpu=name
           () Tune for CPU:对CPU的优化,具体可以查看芯片手册,-mtune=name

  

  最新版本的crosstool-ng只需要选择第一二项目就好了。

  选择 toolchain options:

  

  u-boot 2016.01 不支持GCC6,因此 要把 GCC的版本改成GCC5.0版本--GCC6.0版本之间。

  保存退出。

1.2.3 编译

  执行命令:ct-ng build

  

  编译成功:

  

  建立环境变量:

  vim .bashrc,加入下面一行

  PATH=~/x-tools/arm-s3c2440a-linux-gnueabihf/bin:$PATH/

  执行 source .bashrc

  执行 arm-s3c2440a-linux-gnueabi-gcc -v

  

  u-boot 2016.01 不支持GCC6,因此 要把 GCC的版本改成GCC5.0版本--GCC6.0版本之间。

二、u-boot 工作目录建立

  下载u-boot_2016.01版本,解压u-boot。

  

2.1 board目录修改

2.1.1 创建jz2440板

  查看 ../board/samsung/ 目录下的文件:

  

  此版本中,2440已经被遗弃。所以选定smdk2410为模版创建2440的u-boot。

  

2.1.2 jz2440文件名修改

  修改文件名:

  

2.1.3 Kconfig修改

  修改Kconfig和Makefile文件,将里面的smdk2410修改为jz2440,如下:

  Kconfig文件:

  

2.1.4 Makefile修改

  

2.2 修改头文件

  

  头文件中增加内容:

  

  添加对S3C2440的支持

  找到包含smdk2410.h这个头文件的文件:

  

  没有需要修改的地方

2.3 修改配置文件 

  当前新版的u-boot与linux源码一样,都执行make menuconfig 进行配置,所以在configs目录下要有jz2440的配置。

  config目录下配置:

  

  

2.5 修改arch/arm下的配置文件

  arch/arm/Kconfig,里面添加对jz2440的支持

  

  

2.6 修改rch/arm/include/asm/mach-types.h

  

  

三、配置.config及编译u-boot

3.1 配置.config

  执行命令:make jz2440_defconfig

  

  执行命令:make menuconfig

  

  在ARM architecture中选择target_select项,然手选择jz2440:

  

  配置 u-boot的命令行提示符:

  

  

  保存退出配置。

3.2 编译

  

  编译成功:

  

四、编译错误

4.1 Not enough room for program headers

  arm-2440-linux-gnueabi-ld.bfd: u-boot: Not enough room for program headers, try linking with -N
  arm-2440-linux-gnueabi-ld.bfd: final link failed: Bad value
  make: *** [Makefile:1193: u-boot] Error 1

  解决方法:https://www.mail-archive.com/u-boot@lists.denx.de/msg235861.html

  在根目录的Makefile中加上如下几行:

  

u-boot移植(一)---准备工作的更多相关文章

  1. 标题:u-boot 移植步骤详解

    1 U-Boot简介U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目.从FADSROM.8xxROM.PPCBOOT逐步发展演化而来.其源码目录.编译形式与 ...

  2. -boot移植(十一)---代码修改---支持nandflash

    一.移植前的修改 1.1 include/configs/jz2440修改 原来的定义: 可以看出,要先定义CONFIG_CMD_NAND才能使能NANDFlash. 这个在我们文件中的82行有定义, ...

  3. Android shell 下 busybox,clear,tcpdump、、众多命令的移植

    http://my.oschina.net/mopidick/blog/167372 作为一名Android开发者,经常需要进入Android 的shell终端运行一些命令.但是我们发现Android ...

  4. 【安富莱】【RL-TCPnet网络教程】第10章 RL-TCPnet网络协议栈移植(FreeRTOS)

    第10章     RL-TCPnet网络协议栈移植(FreeRTOS) 本章教程为大家讲解RL-TCPnet网络协议栈的FreeRTOS操作系统移植方式,学习了第6章讲解的底层驱动接口函数之后,移植就 ...

  5. 【RL-TCPnet网络教程】第9章 RL-TCPnet网络协议栈移植(uCOS-III)

    第9章        RL-TCPnet网络协议栈移植(uCOS-III) 本章教程为大家讲解RL-TCPnet网络协议栈的uCOS-III操作系统移植方式,学习了第6章讲解的底层驱动接口函数之后,移 ...

  6. 【安富莱】【RL-TCPnet网络教程】第8章 RL-TCPnet网络协议栈移植(RTX)

    第8章        RL-TCPnet网络协议栈移植(RTX) 本章教程为大家讲解RL-TCPnet网络协议栈的RTX操作系统移植方式,学习了第6章讲解的底层驱动接口函数之后,移植就比较容易了,主要 ...

  7. 【安富莱】【RL-TCPnet网络教程】第7章 RL-TCPnet网络协议栈移植(裸机)

    第7章        RL-TCPnet网络协议栈移植(裸机) 本章教程为大家讲解RL-TCPnet网络协议栈的裸机移植方式,学习了上个章节讲解的底层驱动接口函数之后,移植就比较容易了,主要是添加库文 ...

  8. Spring Boot(1)——开发你的第一款Spring Boot应用(Edition1)

    Spring Boot(1)——开发你的第一款Spring Boot应用(Edition1) 准备工作: java:java 8 或者 java 9: Spring框架:5.0.8.RELEASE或以 ...

  9. FreeRTOS——1

    以下转载自安富莱电子: http://forum.armfly.com/forum.php FreeRTOS 的特点 FreeRTOS 的主要特点如下:1. 支持抢占式调度,合作式调度和时间片调度.2 ...

  10. Jlink下载u-boot

    由于各种原因我的fl2440无启动代码,无任何程序,这时要通过jlink来烧录相关boot程序. 准备工作: 1.Jlink使用jlink commander工具 2.初始化sdram的程序boot. ...

随机推荐

  1. Delphi2007卸载后无法再安装

    Win7下卸载delphi2007后重新安装问题: 1.Delphi/C++ must be installed first 2.could not access network loacation/ ...

  2. Java多线程:用三个线程控制循环输出10次ABC

    转载:http://www.cnblogs.com/gaopeng527/p/5257884.html 题目:有A,B,C三个线程, A线程输出A, B线程输出B, C线程输出C,要求, 同时启动三个 ...

  3. 【转】Caffe的solver文件配置

    http://blog.csdn.net/czp0322/article/details/52161759 solver.prototxt 今天在做FCN实验的时候,发现solver.prototxt ...

  4. Layui_2.x_上传插件使用

    一.上传类 package com.ebd.application.common.utils; import java.awt.geom.AffineTransform; import java.aw ...

  5. BZOJ4828 AHOI/HNOI2017大佬(动态规划+bfs)

    注意到怼大佬的操作至多只能进行两次.我们逐步简化问题. 首先令f[i][j]表示第i天结束后自信值为j时至多有多少天可以进行非防御操作(即恢复自信值之外的操作).这个dp非常显然.由于最终只需要保证存 ...

  6. mysql Packet for query is too large (2036 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.

    解决方法: 打开控制台,输入下面语句,执行 set global max_allowed_packet = 20*1024*1024; 网上说要重启 mysql server, 我是执行完后不用重启就 ...

  7. FFT/NTT总结+洛谷P3803 【模板】多项式乘法(FFT)(FFT/NTT)

    前言 众所周知,这两个东西都是用来算多项式乘法的. 对于这种常人思维难以理解的东西,就少些理解,多背板子吧! 因此只总结一下思路和代码,什么概念和推式子就靠巨佬们吧 推荐自为风月马前卒巨佬的概念和定理 ...

  8. 架构师成长之路6.4 DNS服务器搭建(部署主从DNS)

    点击返回架构师成长之路 架构师成长之路6.3 DNS服务器搭建(部署主从DNS)  部署主DNS : 点击 部署从DNS : 如下步骤 1.与主DNS一样,安装bind yum -y install ...

  9. 51Nod 1048 1383 整数分解为2的幂

    任何正整数都能分解成2的幂,给定整数N,求N的此类划分方法的数量! 比如N = 7时,共有6种划分方法.   7=1+1+1+1+1+1+1   =1+1+1+1+1+2   =1+1+1+2+2   ...

  10. 通过 powershell 配置 IIS

    1. 设置iis pool: cls Import-Module WebAdministration Get-ChildItem IIS:\apppools | ForEach-Object{     ...