• u-boot移植(一)---准备工作


    一、工具链的制作

    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中加上如下几行:

      

  • 相关阅读:
    数据结构之线段树
    数据结构之线段树
    数据结构之树状数组
    codevs1073 家族
    codevs1069 关押罪犯
    codevs1001 舒适的路线
    codevs1282 约瑟夫问题
    codevs1081 线段树练习 2
    codevs1225 八数码难题
    codevs1080 线段树练习
  • 原文地址:https://www.cnblogs.com/kele-dad/p/6910040.html
Copyright © 2020-2023  润新知