am335x uboot移植

在uboot源码目录下,doc/README.kconfig 文档里面有一段说明如何添加新的板子:

从上图可以看出uboot要增加一个单板需要做一下5个步骤:
1、添加头文件 include/configs/<target>.h
2、在相应的Konfig文件下添加相应的配置项,:
1)CONFIG_SYS_CPU="cpu" 编译 arch/<arch>/cpu/<cpu>
2)CONFIG_SYS_SOC="soc" 编译 arch/<arch>/cpu/<cpu>/<soc>
3)CONFIG_SYS_VENDOR="vendor"为了编译 board/<vendor>/common/* 和 board/<vendor>/<board>/*
4)CONFIG_SYS_BOARD="board" 编译 board/<board>/* 如果设置了CONFIG_SYS_VENDOR="vendor" 则编译 board/<vendor>/<board>/*
5)CONFIG_SYS_CONFIG_NAME="target" 包含头文件 include/configs/<target>.h
3、在 arch/<arch>/Kconfig 或者 arch/<arch>/*/Kconfig 添加板子的选择菜单。
4、添加一个MAINTAINERS文件,主要记录参与维护该板子的人员。通常放在 board/<board>/MAINTAINERS 或者 board/<vendor>/<board>/MAINTAINERS
5、添加默认配置文件 configs/<target>_defconfig

在这里,我的目的是做一个最简单的移植需要做的一些步凑,尽量避免代码的编写。由于我手上刚好有一块myd的板子。它的资料也是针对这个板子做了修改的,这里我就基于它的代码做一些简单的移植。你可以认为我什么都没干,仅仅是改了几个文件名和变量名而已,但是我能保证通过这几个简单的修改能让你了解一个uboot的单板移植大概是怎么做的。myd的板子也是基于官方的源代码移植过来的,下图可以看到它主要的修改部分:

u-boot的编译分为两步:
1、配置,执行make xxx_defconfig进行各项配置,生成.config文件。
2、编译,执行make进行编译,生成可执行的二进制文件u-boot.bin或u-boot.elf。
u-boot 引入了Kbuild系统,执行amke之前首先编译生成一个scripts/kconfig/conf 配置程序。
make 会判断参数是否以“_defonfig”或者 "_config"为后缀。如果是那么会从arch/../configs/目录中寻找xxx_defconfig文件。如果没找到arch/../configs/xxx_defconfig文件则报错:

为了让他编译通过可以先拷贝一份生成 lkf_am335x_defconfig 文件再编译:

成功配置了.config,此时执行make,顺利编译完成:

接下来作进一步更改。回头再看lkf_am335x_defconfig都是啥内容:

CONFIG_DEFAULT_DEVICE_TREE="myd_y335x" 看名字好像是设备名称,这里我们把 "myd_y335x" 就改成 “lkf_am335x”

执行 make lkf_am335x_defconfig,查看.config的内容,发现其实还是myd_y335x的配置:

这里的配置肯定还是从 configs/lkf_am335x_defconfig 里面某一个配置项决定的。再回头看一下这个文档的内容:

由此可见CONFIG_TARGET_MYD_Y335X确实决定着目标板的配置,查找一下这个关键字在哪里出现:

发现除了configs/myd_y335x_defonfig 没有其他地方有这关键字了。CONFIG_TARGET_MYD_Y335X前缀“CONFIG_”是配置的意思,配置的目标应该是 TARGET_MYD_Y335X,那么全局查找一下 TARGET_MYD_Y335X:

在 arch/arm/Kconfig找到了该关键字,进一步查看一下:

这里涉及到了Kconfig文件,Kconfig文件在u-boot和内核源码很常见的文件,他是命令 make menuconfig 配置界面的源文件,
393行 config 是关键字,表示一个配置选项的开始,紧跟着TARGET_MYD_Y335X就是配置选项的名称,前面省略了前缀“CONFIG_”;
394行 bool是一个二值变量:y和n,后面的“Support myd_y335x”是是该配置项的描述语
395-399的select是一个依赖关系,表示当CONFIG_TARGET_MYD_Y335X=y 的时候,CPU_V7等这些配置项也跟着为y
对应的make menuconfig界面其实就是:

configs/myd_y335x_defconfig文件里面的的第2行CONFIG_TARGET_MYD_Y335X=y 其实就等价于选中Support myd_y335x选项。TARGET_MYD_Y335X 真正其中用是在 board/myirtech/myd_y335x/Kconfig 文件中:

说明:
1、其中第3-7行,SYS_BOARD被定义为默认值myd_y335x,主要是定义了板子相关的源文件位置, SYS_VENDOR被定义为myirtech说明该板子的供应商目录。这两个宏的实际意义是,编译的时候会自动编译 board/myirtech/myd_y335x/* 下的所有源文件
2、第9、10定义了 SYS_SOC 为“am335x”这个SOC是TI写好了,我们暂时不需要深入了解,只要知道am335x都定义为这个就行了
3、SYS_CONFIG_NAME 定义为myd_y335x,这里的作用是使用板子相关的都文件:include/configs/myd_y335x.h 而 board/myirtech/myd_y335x/Kconfig 这个文件又是如何被 Kconfig得知的呢?答案还是在arch/arm/Konfig 文件中:

925行 source "board/myirtech/myd_y335x/Kconfig" 添加了board/myirtech/myd_y335x/Kconfig 文件
经过上面的分析,我们添加关于我们自己的路径:

经过上边401-407行的添加,我们再 make menuconfig 一下发现已经有了我们刚才添加了的板子了:

接下来创建 board/lkf 和 board/lkf/lkf_am335x路径;
为了简单起见,将board/myirtech/myd_y335x/下的文件全部复制到board/lkf/lkf_am335x/路径下:

将board/myirtech/ 路径下的common 目录拷贝到board/lkf/路径下:

修改 board/lkf/lkf_am335x/Kconfig文件的内容:

其中第1行,将目标板子改为 TARGET_LKF_AM335X
第3/4行,将板子的名称改为 “lkf_am335x”
第6/7行,将供应商改为 "lkf"
以上两项的作用是目标板子时,编译器编译 board/lkf/lkf_am335x/*下的内容,通熟的点讲就是编译器会自动到该路径下找目标板的相关内容
第12/13行,将配置名称改为lkf_am335x,这个配置的作用是包含头文件 include/configs/lkf_am335x.h

将board/lkf/lkf_am335x/目录下的myd_y335x.重命名为lkf_am335x.c

将board/lkf/lkf_am335x/的Makefile文件中的目标改为lkf_am335x.o

将board/lkf/lkf_am335x/u-boot.lds 文件中39行的路径改为board/lkf/lkf_am335x/

将include/configs/myd_y335x.h 拷贝一份 include/configs/lkf_am335x.h

修改include/configs/lkf__am335x.h的内容,改动如下:

其中56和212行是uboot启动之后的环境变量。
56行表示的是uboot启动之后执行run updatesys 时有一个步凑是将lkf_am335s.dtb设备树文件加载到0x82000000地址处,再将0x82000000处的内容写到nandflags的0x80000处,大小是lkf_am335x.dtb文件的大小。
212行表示run findfdt 时查找lkf_am335x.dtb文件。

最后将configs/lkf_am335x_defconfig 第2行目标板改为:TARGET_LKF_AM335X:

基本修改完毕,执行 make lkf_am335x_defconfig 顺利执行,查看.config
显示正确配置了目标板:

执行make,成功编译通过:

将 MLO和u-boot.img复制到实现准备好的sd卡中

将开发板设置为sd卡启动,成功启动了uboot:

其中 LKF-UBOOT># 正是我们在configs/lkf_am335x_defconfig 中修改的CONFIG_SYS_PROMPT了:

接下来我们增加一条最简单的测试命令:在common目录下新建一个文件暂且取名为lkf_cmd.c。内容如下:

common/Makefile 添加编译lkf_cmd.c文件:

编译运行进入cmd输入命令"lkf":

结果显示命令已经被正确添加了。到此,一个简单的移植就结束了。

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值