0 主机环境

Linux version 4.10.0-42-generic (buildd@lgw01-amd64-051) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.5) ) #46~16.04.1-Ubuntu SMP Mon Dec 4 15:57:59 UTC 2017

1 交叉编译工具

安装:

sudo apt-get install gcc-arm-linux-gnueabi

这样安装后,交叉编译工具是最新版的,在编译较低内核版本时,发现遇到问题,所以,这儿可以尽量安装较低版本的交叉编译工具,比如4.7。当然,如果已经安装了最新版的交叉编译工具,可以按照后面一节,把版本降低即可解决。

2. 下载

下载命令:

git clone  git://repo.or.cz/w/u-boot-openmoko/mini2440.git  uboot

或者打包下载

wget http://repo.or.cz/w/u-boot-openmoko/mini2440.git/snapshot/HEAD.tar.gz

3. 编译

解压,并修改其名称为u-boot-for-mini2440:

tar -xf HEAD.tar.gz
mv [解压后的目录名称] u-boot-for-mini2440

进入解压后的文件目录

cd u-boot-for-mini2440

配置Makefile文件,打开Makefile文件,CROSS_COMPILE变量赋值,即自己所使用的交叉编译工具链,比如我的是arm -linux-gnueabi-,保存退出,输入

#  make mini2440_config
#  make  -j4

或者直接输入下面的命令进行编译:

#  make mini2440_config
#  make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j4

稍等两分钟,即在当前目录下生成名为 u-boot.bin 的文件,注意如果想在之后使用u-boot的nfs下载文件功能,需要修改代码中的一部分, 将 net/nfs.c 文件中的 NFS_TIMEOUT = 2UL 修改为 NFS_TIMEOUT = 20000UL 否则会造成nfs文件下载失败, 如果不使用nfs下载功能,不改也可。

编译成功后:

arm-linux-gnueabi-objcopy --gap-fill=0xff -O srec u-boot u-boot.srec
arm-linux-gnueabi-objcopy --gap-fill=0xff -O binary u-boot u-boot.bin
dd if=u-boot.bin of=u-boot-nand2k.bin bs=2K conv=sync
115+1 records in
116+0 records out
237568 bytes (238 kB, 232 KiB) copied, 0.000626312 s, 379 MB/s
dd if=u-boot.bin of=u-boot-nand16k.bin bs=16K conv=sync
14+1 records in
15+0 records out
245760 bytes (246 kB, 240 KiB) copied, 0.00182879 s, 134 MB/s
yokogawa@yokogawa-VirtualBox:~/qemu/u-boot-for-mini2440$

4. 遇到的问题

mkimage编译错误,报错内容:

undefined reference to `image_print_contents_noindent`

或者编译其它内容时,也发现:

undefined reference to `show_boot_progress`:

发现上述出现错误的地方都是inline函数,而且声明和定义在不同的文件,且前面都有inline关键字。觉得问题可能出在inline关键字的使用上,于是上网搜索资料后,发现一篇文章,分析的挺好,《C语言inline详细讲解》其中一段话,是这样说的:

本文介绍了GCC和C99标准中inline使用上的不同之处。inline属性在使用的时候,要注意以下两点:inline关键字在GCC参考文档中仅有对其使用在函数定义(Definition)上的描述,而没有提到其是否能用于函数声明(Declare)。从 inline的作用来看,其放置于函数声明中应当也是毫无作用的:inline只会影响函数在translation unit(可以简单理解为C源码文件)内的编译行为,只要超出了这个范围inline属性就没有任何作用了。所以inline关键字不应该出现在函数声明 中,没有任何作用不说,有时还可能造成编译错误(在包含了sys/compiler.h的情况下,声明中出现inline关键字的部分通常无法编译通 过);
inline关键字仅仅是建议编译器做内联展开处理,而不是强制。在gcc编译器中,如果编译优化设置为-O0,即使是inline函数也不会被内联展开,除非设置了强制内联(__attribute__((always_inline)))属性。

所以,将上面出错的地方的定义处,把inline关键字去掉,然后重新编译,通过。

编译u-boot-mini2440相关推荐

  1. Android源码编译过程之九鼎开发板

    1 build_kernel() 2 { 3 # 进入源码顶层目录 4 cd ${BS_DIR_KERNEL} || return 1 5 # 编译配置文件 6 make ${BS_CONFIG_KE ...

  2. g++ linux 编译开栈_使用 linux kernel +busybox 定制linux系统

    写在开头: 本来是想使用linux kernel +busybox 制作一个教程的,后来快要结束的时候,死活找不到硬盘,我了解很多文章都有类似的,但是没有谈到硬盘找不到问题,最后历经艰辛,终于把问题解 ...

  3. 使用 CODING 进行 Spring Boot 项目的集成

    本文作者:CODING 用户 - 高文 持续集成 (Continuous integration) 是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可 ...

  4. python编译为机器码_通过 GraalVM 将 Java 程序编译成本地机器码!

    前言 2018年4月,Oracle Labs新公开了一项黑科技:Graal VM. 这是一个在HotSpot虚拟机基础上增强而成的跨语言全栈虚拟机,可以作为"任何语言"的运行平台使 ...

  5. linux内核烧制,手机烧录自己编译的linux kernel

    编译linux kernel : 首先,要编译手机平台上的内核镜像,需要交叉编译工具,而一般主流的手机上的交叉编译环境都很完备了,只要把它纳入PATH目录,基本都可以make成功. 假设交叉编译环境工 ...

  6. Android 内核源码编译记录

    注:此处内容总结自google官网:AOSP 编译内核.编译完成后刷机部分参考自其他大佬的文章.文中末尾提供了上传至CSDN的msm内核和Aarch64gcc工具 的下载链接,不想从官网下载的可以直接 ...

  7. 在Linux下安装配置bochs,并成功跑一个简单的boot引导(超详细)

    环境:centos7(建议带桌面的版本)镜像网址 环境配置:gcc.gas.nasm.make 1.配置环境 yum -y install xxx(eg:gcc.等) 若出现yum源问题请观看 没有可 ...

  8. AVB源码学习(一):AVB2.0工作原理及编译配置

    参考资料 感谢前辈的blog,安全相关的资料可太少了,很详细很卓越 https://blog.csdn.net/jackone12347/article/details/116241676 前言 在这 ...

  9. android AVB2.0(一)工作原理及编译配置

    android AVB2.0介绍,本篇主要介绍AVB2.0的概述和工作原理.配置和编译. 有关AVB2.0的其他子系统的介绍,请查看android AVB2.0学习总结 一.AVB2.0概述 什么是A ...

  10. aosp编译设备树文件dtbo.img

    在编译设备树镜像的时候,出现编译成功但是编译信息显示nijia:no work to do ,且不更新dtbo.img镜像 下面我们分析一下问题所在: dtbo镜像就是不重新生成最新的修改完设备树文件 ...

最新文章

  1. ORM 框架中SQLALCHEMY一点点个人总结
  2. MPB:林科院袁志林组-​内生镰刀菌基因组染色体级别组装和注释
  3. 中传计算机应用研究生分数线,2018中国传媒大学考研复试分数线(含2016-2018年)...
  4. 应用程序的数据库从Sql Server迁移到Oracle
  5. 《软技能:代码之外的生存指南》一一21.1 为什么博客如此重要
  6. 统计学习笔记(3)——k近邻法与kd树
  7. 《途客圈创业记:不疯魔,不成活》一一2.1 创新工场初印象
  8. Hazelcast集群服务(2)——Hazelcast基本配置
  9. 天梯 L2 这是二叉搜索树吗?
  10. Tab选项卡切换效果JavaScript汇总
  11. MemSQL 1.8 发布,号称最快的关系数据库
  12. 安装xmanager linux系统,安装Xmanager登陆Linux操作系统[图文]
  13. java 中类超时_Java中httpClient中的三种超时设置总结
  14. 晶闸管对触发脉冲的要求
  15. 百度网盘链接提取码接口实现
  16. 【供应链架构day8】履约系统的架构长什么样子:从需求开始讲起
  17. 页面练习my blog day51
  18. centos 6.9界面中文显示英文或者英文界面改中文
  19. java五子棋棋盘_java绘制五子棋棋盘代码示例
  20. 算力网络价值场景和市场机遇探讨

热门文章

  1. 媒体报道 | 企业级开源软件大时代,PingCAP 的格局与胜局
  2. 电子邮件市场中,如何使用您的Gmail?
  3. 游戏产品开发流程 - Leangoo项目管理工具
  4. (必看)视频开发项目的技术来源、实现形式、走向。 --VFW。DirectSHow 。MediaFoundation...
  5. 华为模拟器ensp学习笔记
  6. 【软路由】Gl-iNet SFT1200 原版OpenWrt固件编译并添加插件
  7. Real-Time Pedestrian Detection with Deep Network Cascades
  8. 运动APP视频轨迹回放分享实现
  9. 如何快速查找并删除手机上的重复文件
  10. 怎么将DWG转换成JPG黑白