zoukankan      html  css  js  c++  java
  • 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进行编译,发现编译成功;
    在这里插入图片描述

  • 相关阅读:
    十一、异常处理&运行流程
    logback的使用和logback.xml详解
    十、拦截器
    word源代码解析(方便通过源码将word文件转换成html) 持续更新中
    laravel 打印sql
    利用workman进行回复指定用户指定内容
    js 根据val值获取对象key键值
    php添加邀请码
    微信支付退款流程 php
    解决ubuntu下修改环境变量profile后报错,很多常用命令都用不了
  • 原文地址:https://www.cnblogs.com/unclemac/p/12783382.html
Copyright © 2011-2022 走看看