u-boot2010.03 移植篇(一)-----建立编译目标

2024-02-26 02:58

本文主要是介绍u-boot2010.03 移植篇(一)-----建立编译目标,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

经过一阵子的分析篇,下面开始移植篇,这些要讲的东西并不是特别多,主要是对建立说s3c6410编译板的支持..让我们可以编译出自己的image
好了,在移植篇开始之前,最好先看一下分析篇..对uboot的编译目标的选择,以及编译目标的过程有个大致的了解..不至于无从下手....

u-boot2010.03 Makefile分析
http://blog.csdn.net/yyttiao/article/details/7899530
u-boot2010.03 配置编译目标分析
http://blog.csdn.net/yyttiao/article/details/7899008


下面开始 移植篇(一)-----修改Makefile,生成编译目标---S3C6410
----------------------------- -----------------------------
使用环境
PC:     ubuntu 11.04
kernel: 2.6.32-28-generic
corss:  arm-linux-gcc 4.3.2
arm:    s3c6410
uboot:  uboot-2010-03
----------------------------- -----------------------------

一切版权均有作者所有,欢迎转载,请指明出处,如何修改请与本人联系,谢谢


开始教程之前.你需要下载源码,解压....此处略过千万行~~源码为uboot2010.03这个..别整错了.错了也没事,都差不多~

这里,我们直接打开Makefile,找到smdk6400_config,根据6400 添加6410 的目标......如下:


[cpp]  plain copy
  1. #########################################################################  
  2. ## ARM1176 Systems  
  3. #########################################################################  
  4. smdk6400_noUSB_config \  
  5. smdk6400_config : unconfig  
  6.         @mkdir -p $(obj)include $(obj)board/samsung/smdk6400  
  7.         @mkdir -p $(obj)nand_spl/board/samsung/smdk6400  
  8.         @echo "#define CONFIG_NAND_U_BOOT" > $(obj)include/config.h  
  9.         @if [ -z "$(findstring smdk6400_noUSB_config,$@)" ]; then \  
  10.             echo "RAM_TEXT = 0x57e00000" >> $(obj)board/samsung/smdk6400/config.tmp;\  
  11.             $(MKCONFIG) $(@:_config=) arm arm1176 smdk6400 samsung s3c64xx; \  
  12.         else \  
  13.             echo "RAM_TEXT = 0xc7e00000" >> $(obj)board/samsung/smdk6400/config.tmp;\  
  14.             $(MKCONFIG) $(@:_noUSB_config=) arm arm1176 smdk6400 samsung s3c64xx; \  
  15.         fi  
  16.         @echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk  
  17.   
  18. smdk6410_noUSB_config \  
  19. smdk6410_config : unconfig  
  20.         @mkdir -p $(obj)include $(obj)board/samsung/smdk6410  
  21.         @mkdir -p $(obj)nand_spl/board/samsung/smdk6410  
  22.         @echo "#define CONFIG_NAND_U_BOOT" > $(obj)include/config.h  
  23.         @if [ -z "$(findstring smdk6400_noUSB_config,$@)" ]; then \  
  24.             echo "RAM_TEXT = 0x57e00000" >> $(obj)board/samsung/smdk6410/config.tmp;\  
  25.             $(MKCONFIG) $(@:_config=) arm arm1176 smdk6410 samsung s3c64xx; \  
  26.         else \  
  27.             echo "RAM_TEXT = 0xc7e00000" >> $(obj)board/samsung/smdk6410/config.tmp;\  
  28.             $(MKCONFIG) $(@:_noUSB_config=) arm arm1176 smdk6410 samsung s3c64xx; \  
  29.         fi  
  30.         @echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk 
接着修改交叉编译器:
[cpp] plain copy
  1. # set default to nothing for native builds  
  2. ifeq ($(HOSTARCH),$(ARCH))  
  3.     CROSS_COMPILE ?= arm-linux-  
  4. endif  
下面先编译试下...肯定很多错误喔~~~
好了,那我这里就犯个傻.来 Make 下,首先你得 Make smdk6410_config
我这第一个错误是如下:
fatal error: configs/smdk6410.h: No such file or directory
为啥呢?为什么会出现这个文件没有呢?到底哪个文件里面居然能未卜先知,知道我们要添加 smdk6410.h 呢?
我自问自答吧...你可以看分析篇中, mkconfig 中最后有写入 config.h 中的一句话,有这么一句 #include <configs/$1.h>
$1 没错,就是我们板级的名字 smdk6410 这样uboot就有了未卜先知的能力...具体查看分析篇

好.我们复制 smdk6400.h
cp include/configs/smdk6400.h include/configs/smdk6410.h


好,我们继续make,接着是我的第二个错误.没有smdk6410这个目录...哎~~这里就不分析为什么会冒出来 smdk6410 这个目录了..请看分析篇
make -C board/samsung/smdk6410/
make[1]: 正在进入目录 `/home/LinuxProject/u-boot/u-boot-2010.03/board/samsung/smdk6410'
make[1]: *** 没有指明目标并且找不到 makefile。 停止。
make[1]:正在离开目录 `/home/LinuxProject/u-boot/u-boot-2010.03/board/samsung/smdk6410'
make: *** [board/samsung/smdk6410/libsmdk6410.a] 错误 2


我们依旧复制smdk6400的.不过得稍微修改下里面的文件喔~~把smdk6400 都改成smdk6410
cd board/samsung/
cp smdk6400 smdk6410 -rf
cd smdk6410/

修改 smdk6400.c smdk6410.c
打开 smdk6410.c 修改头文件 #include <asm/arch/s3c6400.h> #include <asm/arch/s3c6410.h>
没错,这个头文件是没有的,一会自己复制下....依旧是复制 s3c6400.h
cp include/asm-arm/arch-s3c64xx/s3c6400.h include/asm-arm/arch-s3c64xx/s3c6410.h

这里为什么复制的路径不是asm/arch请看分析篇,在make smdk6410_config的时候.会根据参数建立软连接,最后就是这个目录
该目录下的其他文件也得看看有没有这个头文件.需要修改呦~~~
好了.最后剩下Makefile需要修改了.在编译错误中说,libsmdk6410.a 这个没有...对滴..需要把Makefile中的smdk6400.o 改成smkd6410.o
因为我们的源文件名字已经改了...

咱们继续编译Make咯~~~
哎呀妈呀..又是错...这又是啥呢?没有cpu_init.o库?
我们直接进这个目录下一看究竟
arm-linux-ld: cannot find cpu/arm1176/s3c64xx/cpu_init.o
直接打开Makefile发现啥?COBJS-$(CONFIG_S3C6400) += cpu_init.o speed.o
居然跟我们玩条件编译喔~~~但是不对啊...CONFIG_S3C6400是定义的啊,,在include/configs/smdk6410.h 中是有的.那为什么没有编译呢?
哈哈~~其实只要重新选择板级make smdk6410_config 重新生成config.mk

继续编译....还是有错~~~疯了没?别着急,快了哈~~~
make -C nand_spl/board/samsung/smdk6410 all
make[1]: 正在进入目录 `/home/LinuxProject/u-boot/u-boot-2010.03/nand_spl/board/samsung/smdk6410'
make[1]: *** 没有规则可以创建目标“all”。 停止。
make[1]:正在离开目录 `/home/LinuxProject/u-boot/u-boot-2010.03/nand_spl/board/samsung/smdk6410'
make: *** [nand_spl] 错误 2

这个问题简单了吧....当然是没有这个目录了...咱们还是去复制吧
cp nand_spl/board/samsung/smdk6400 nand_spl/board/samsung/smdk6410 -rf
cd nand_spl/board/samsung/smdk6410/

继续修改头文件,还有Makefile 还有文件名字对吧...没错...聪明~~~~
进去一看...傻了?没什么好修改的嘛....那就不改呗~~~继续编译吧...

天哪~~好了....编译出了uboot.bin

开心吧~~~今天教程就到这了...我们已经达成目的了.到底怎么添加我们需要的目标,以及目标的编译,需要修改哪些文件,需要添加哪些目录..
我这里总结下:
1:修改Makefile
->交叉编译器
->添加smdk6410_config目标
2:添加configs/smdk6410.h头文件
3:添加board/samsung/smdk6410 目录,并修改该目录内文件,以及Makefile
4:添加include/asm-arm/arch-s3c64xx/s3c6410.h头文件
5:添加nand_spl/board/samsung/smdk6410目录


最后编译成功....完了...

下一篇,第一阶段nand启动支持

Finish!
Thanks a lot.

这篇关于u-boot2010.03 移植篇(一)-----建立编译目标的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/747518

相关文章

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO

建立升序链表

题目1181:遍历链表 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2744 解决:1186 题目描述: 建立一个升序链表并遍历输出。 输入: 输入的每个案例中第一行包括1个整数:n(1<=n<=1000),接下来的一行包括n个整数。 输出: 可能有多组测试数据,对于每组数据, 将n个整数建立升序链表,之后遍历链表并输出。 样例输

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

Windows环境利用VS2022编译 libvpx 源码教程

libvpx libvpx 是一个开源的视频编码库,由 WebM 项目开发和维护,专门用于 VP8 和 VP9 视频编码格式的编解码处理。它支持高质量的视频压缩,广泛应用于视频会议、在线教育、视频直播服务等多种场景中。libvpx 的特点包括跨平台兼容性、硬件加速支持以及灵活的接口设计,使其可以轻松集成到各种应用程序中。 libvpx 的安装和配置过程相对简单,用户可以从官方网站下载源代码

[数据集][目标检测]血细胞检测数据集VOC+YOLO格式2757张4类别

数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2757 标注数量(xml文件个数):2757 标注数量(txt文件个数):2757 标注类别数:4 标注类别名称:["Platelets","RBC","WBC","sickle cell"] 每个类别标注的框数:

Golang test编译使用

创建文件my_test.go package testsimport "testing"func TestMy(t *testing.T) {t.Log("TestMy")} 通常用法: $ go test -v -run TestMy my_test.go=== RUN TestMyTestMy: my_test.go:6: TestMy--- PASS: TestMy (0.

C++/《C/C++程序编译流程》

程序的基本流程如图:   1.预处理        预处理相当于根据预处理指令组装新的C/C++程序。经过预处理,会产生一个没有宏定义,没有条件编译指令,没有特殊符号的输出文件,这个文件的含义同原本的文件无异,只是内容上有所不同。 读取C/C++源程序,对其中的伪指令(以#开头的指令)进行处理将所有的“#define”删除,并且展开所有的宏定义处理所有的条件编译指令,如:“#if”、“

编译linux内核出现 arm-eabi-gcc: error: : No such file or directory

external/e2fsprogs/lib/ext2fs/tdb.c:673:29: warning: comparison between : In function 'max2165_set_params': -。。。。。。。。。。。。。。。。。。 。。。。。。。。。。。。。 。。。。。。。。 host asm: libdvm <= dalvik/vm/mterp/out/Inte

QT 编译报错:C3861: ‘tr‘ identifier not found

问题: QT 编译报错:C3861: ‘tr’ identifier not found 原因 使用tr的地方所在的类没有继承自 QObject 类 或者在不在某一类中, 解决方案 就直接用类名引用 :QObject::tr( )