u-boot 移植 --->1、u-boot配置(Kbuild)

发布者:电子设计艺术家最新更新时间:2024-12-23 来源: cnblogs关键字:u-boot  移植  配置  Kbuild 手机看文章 扫描二维码
随时随地手机看文章

早期的U-BOOT的裁剪是没有使用Kbuild工具的,后来就借鉴了Linux的Kbuild同时也是方便使用者裁剪,因为他的原理和Linux内核的配置裁剪原理是相同的。今天拿来分析的U-Boot的版本是u-boot-2017.11,主要原因是我电脑上的gcc版本编译不了更新的版本,但是不影响拿来学习。U-boot开始编译之前需要先执行make xxxdefconfig 进行U-boot 的配置裁剪,之后才能进行编译Kbuild就是在第一步中发挥主要作用的。本次使用的默认文件为三星s5p_goni_defconfig。


运行

通过执行make V=1 s5p_goni_defconfig 会发现其实他就是生成了一个conf可执行文件,通过再次make V=1 s5p_goni_defconfig就可以看到顶层makefile具体执行了什么指令


make -f ./scripts/Makefile.build obj=scripts/basic

rm -f .tmp_quiet_recordmcount

make -f ./scripts/Makefile.build obj=scripts/kconfig s5p_goni_defconfig

scripts/kconfig/conf  --defconfig=arch/../configs/s5p_goni_defconfig Kconfig

因为文件都是最新的所以实际执行了命令但是什么都没有运行,主要是最后一条命令运行了前编译生成的conf文件并把默认文件作为输入最后就会生成.config文件在u-boot的根目录下,这个文件的内容就是所有的配置信息,Kbuild的工作到这里基本就算完了,其实后面还需要生成config.h文件,最后被代码引用从而进行条件编译。因为make是在u-boot目录下开始运行的,所以


scripts/kconfig/conf  --defconfig=arch/../configs/s5p_goni_defconfig Kconfig

 命令中的Kconfig就是根目录下的Kconfig文件如下


Kconfig


第13和最后部分有如下节选代码


# Allow defaults in arch-specific code to override any given here

source 'arch/Kconfig'


menu 'General setup'


source 'api/Kconfig'


source 'common/Kconfig'


source 'cmd/Kconfig'


source 'disk/Kconfig'


source 'dts/Kconfig'


source 'env/Kconfig'


source 'net/Kconfig'


source 'drivers/Kconfig'


source 'fs/Kconfig'


source 'lib/Kconfig'


source 'test/Kconfig'


kbuid中source就如同C语言中的头文件引用,本引用的文件会直接放到当前文件的当前位置,同样这些文件中都还会引用其他的Kconfig文件最终的包含关系如下。


就那这次的板子为例,他是三星的s5pc1xx的芯片的所以,他是由'arch/arm/mach-s5pc1xx/Kconfig'文件包含的,主要理一下一下层级关系就是arch-->arm--->chip-->board,而其他的会有些板子是直接由arm目录下的Kconfig包含板级配置文件的,不过这样对于功能是没有影响的,因为Kbuild的配置过程就是按上面的层级关系进行推导,内层或同层文件可以修改之前的配置值,所以Kbuild实际上是对上面两种方式都能识别的。


所以如果现在是要进行移植U-boot,分两种情况一个是芯片本身U-boot已经有支持过的其他的平台,比如mach-s5pc1xx的SOC,则只需要在u-boot目录下的board文件夹下的samsung文件下增加新的board的文件夹并实现相关的内容后(一般是拷贝后修改),最后修改'arch/arm/mach-s5pc1xx/Kconfig'的如下增加


if ARCH_S5PC1XX


choice

    prompt 'S5PC1XX board select'

    optional


config TARGET_S5P_GONI

    bool 'S5P Goni board'

    select OF_CONTROL


config TARGET_SMDKC100

    bool 'Support smdkc100 board'

    select OF_CONTROL


endchoice


config SYS_SOC

    default 's5pc1xx'


source 'board/samsung/goni/Kconfig'

source 'board/samsung/smdkc100/Kconfig'

source 'board/samsung/newxxx/Kconfig'


endif


然后依次在configs目录下增加对应板子的的xxxdefconfig文件,在include/configs/下增肌新板子的.h文件,也可以拷贝借鉴的板子的进行修改,最后就是注意.h文件的命令和板级文件中的Kconfig中的config SYS_CONFIG_NAME配置选项保持相同。如果是一个全新的处理器除了arch/cpu目录下的文件和配置项可以使用外,其他的就全得自己实现,这个我自己试着增加了一个芯片,发现需要注意的时需要修改 'arch/arm/Kconfig'文件添加增加的新SOC如有必要可能需要修改SOC对应架构(ARM_V7)目录下的makefile文件,以增加将新增加的内容进行编译。可以参考:https://blog.csdn.net/qq_16777851/article/details/81543373#comments;Kbuild的语法比较易懂关键字也比较少具体的语法参考网上或者Linux源码的Documention目录下的详细说明,这里只记录了比较少见的属性


imply

弱反向依赖:当前配置项被选中时,选中symbol,但是symbol仍然可由依赖或者手动配置为n。

具体详细可以参考这一片博客:https://blog.csdn.net/liao20081228/article/details/81286729






关键字:u-boot  移植  配置  Kbuild 引用地址:u-boot 移植 --->1、u-boot配置(Kbuild)

上一篇:u-boot 移植 --->2、在u-boot新增SOC和板子
下一篇:ARM汇编---程序获取符号的物理地址

推荐阅读最新更新时间:2026-03-24 10:55

U-Boot移植(2)修改SDRAM的配置
接着上面的。。 5、从查资料后,可知,BANK6的设置:位宽为32,宏B6_BWSCON刚好为DW32,无需改变。 由于我所用的开发板的HCLK都设为100MHZ,需要根据SDRAM芯片的具体参数重新计算REFCNT寄存器的值。 BANK6对应SDRAM B6_BWSCON 可以看到我已经修改成新的值。。。 对于其它的BANK,比如网卡芯片DM9000所在的BANK4,原来设置刚好匹配,无需更改; 而对于其它的BANK1,BANK2,BANK3,BANK5,BANK7,在U-Boot中并没有使用到它们外接设备,也无需理会。
[单片机]
<font color='red'>U-Boot</font><font color='red'>移植</font>(2)修改SDRAM的<font color='red'>配置</font>
u-boot 移植 --->4、Tiny210核心板的DDR初始化下详解
RAM的原理简单学习 DDR是RAM的一种,RAM常见的类型有SRAM,SDRAM,DDR他们的共同特点是,随机存储意味着读写速度快,掉电后数据丢失,所以常用来存储程序中的变量。 SRAM 静态随机存储器英文是static random-access memory 就是保持上电就可以保存数据而不需要刷新。数据线和地址线分离以IS62WV51216这个芯片为例,他数据位宽为16,大小为1MB,地址线宽是19。所以可以访问的空间大小就是2的19次方即524288=512KB,然后数据线是16位了,所以512KB*2 就是这个芯片的全部容量。然后在加上一些必要的控制线比如片选,字节选择等就可以完成读写控制,他的特点是不需要刷新
[单片机]
<font color='red'>u-boot</font> <font color='red'>移植</font> --->4、Tiny210核心板的DDR初始化下详解
tiny210(s5pv210)移植u-boot(基于 2014.4 版本号)——NAND 启动
我们知道 s5pv210启动方式有非常多种,sd卡和nand flash 启动就是当中的两种,前面我们实现的都是基于sd卡启动,这节我们開始实现从nand flash 启动: 从 NAND 启动 u-boot,须要 BL1 初始化 NAND 控制器,然后从 NAND 拷贝 BL2 到 DDR 内存。这里的BL1 即我们移植的 u-boot-spl.bin,BL2 即我们移植的 u-boot.bin。在 u-boot.bin 中的 NAND 驱动比較大,它包括了非常多功能,而 u-boot-spl.bin 中仅仅须要从 NAND 拷贝BL2 到 DDR 即可了,因此我们能够在 u-boot-spl.bin 进行简单的 N
[单片机]
tiny210(s5pv210)<font color='red'>移植</font><font color='red'>u-boot</font>(基于 2014.4 版本号)——NAND 启动
S3C6410移植u-boot
  1、下载uboot http://ftp.denx.de/pub/u-boot/   2、解压文件 tar xvf u-boot-latest.tar.bz2   3、进入uboot根目录、接着开始修改文件   4、创建板级文件目录 cd /borad/samsung mkdir smdk6410   5、复制smdk6400文件到创建的文件目录 cp smdk6400/* smdk6410/   6、修改目录下的文件名 cd smdk6410 mv smdk6400.c smdk6410.c mv smdk6400_nand_spl.c smdk6410_nand_spl.c   7、修改板级文件内容
[单片机]
U-Boot移植
1. 安装韦东山的虚拟版的ubuntu 9, 里面交叉编译啥的都弄好了, 直接用, 然后把workstation共享目录打开, 指向uboot的压缩包所在目录. 2. 在虚拟机上, 打开ssh, 通过ssh, 进/mnt/hgfs/ 把uboot压缩包解压了. 3. 编辑Makefile, 在smdk2400下面增加两行, 注意要好tab键 smdk2400_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t smdk2400 NULL s3c24x0 tx2440_config : unconfig @$(MKCONFIG) $(@:_conf
[单片机]
U-Boot移植(7)总结U-Boot工程的总体结构
3、u-boot的通用目录是怎么做到与平台无关的? include/configs/100ask24x0.h 这个头文件中主要定义了两类变量。  一类是选项,前缀是CONFIG_,用来选择处理器、设备接口、命令、属性等,主要用来决定是否编译某些文件或者函数。 另一类是参数,前缀是CFG_,用来定义总线频率、串口波特率、Flash地址等参数。这些常数参量主要用来支持通用目录中的代码,定义板子资源参数。 这两类宏定义对u-boot的移植性非常关键,比如drivers/cs8900.c,对cs8900而言,很多操作都是通用的,但不是所有的板子上面都有这个芯片,即使有它在内存中映射的基地址也是平台相关的。所以对于smdk2410板,在s
[单片机]
U-Boot移植(10)u-boot重定位后的内存分布
对于smdk2410,RAM范围从0x30000000~0x34000000. u-boot占用高端内存区。从高地址到低地址内存分配如下:  显示缓冲区 (.bss_end~34000000) u-boot(bss,data,text) (33f00000~.bss_end) heap(for malloc) gd(global data) bd(board data) stack .... nor flash (0~2M) 参考:http://deshunfan.blog.163.com/blog/static/342441012
[单片机]
U-Boot移植(1)新建一个开发板的相应目录和文件
今天很高兴,终于把U-Boot移植成功,在做的同时,我把一些步骤以截图记下。。现在我来慢慢回顾下过程。。 1、从官网上下了个U-Boot-1.1.6,网址:http://sourceforge.net/projects/u-boot/。然后放到Ubuntu的/work/下,解压。 2、进入board目录,将smdk2410复制为100ask24x0,并将board/100ask24x0/smdk2410.c改名为100ask24x0.c。 3、将include/configs/smdk2410.h直接复制为100ask24x0.h 4、修改以下两个Makefile,先看顶层的Makefile,增加底部
[单片机]
<font color='red'>U-Boot</font><font color='red'>移植</font>(1)新建一个开发板的相应目录和文件
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved