2019独角兽企业重金招聘Python工程师标准>>>

我使用的是最新的u-boot版本(2013-10-rc3),你想下载的话可以去u-boot官网下载(http://www.denx.de/wiki/U-Boot/WebHome),推荐使用git下载,这样方便你时刻与最新版本保持更新。

我会时刻记录下在移植中的一些问题和我自己的解决方案,作为参考,我借鉴了2011-03这个版本的u-boot,当然二者之间还是有不同,我也会将这些差异记录下来,方便后来者参考。

U_BOOT_CMD:定义于include/command.h

在2011-03的版本是这么定义:

#define Struct_Section __attribute__ ((unused,section (".u_boot_cmd")))#define U_BOOT_CMD_MKENT_COMPLETE(name,maxargs,rep,cmd,usage,help,comp) \ {#name, maxargs, rep, cmd, usage, _CMD_HELP(help) _CMD_COMPLETE(comp)}#define U_BOOT_CMD_COMPLETE(name,maxargs,rep,cmd,usage,help,comp) \cmd_tbl_t __u_boot_cmd_##name Struct_Section = \U_BOOT_CMD_MKENT_COMPLETE(name,maxargs,rep,cmd,usage,help,comp)#define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) \U_BOOT_CMD_COMPLETE(name,maxargs,rep,cmd,usage,help,NULL)
__u_boot_cmd_start = .;.u_boot_cmd : { *(.u_boot_cmd) }
__u_boot_cmd_end = .;

在2013-10-rc3的最新u-boot版本中,对此有改动,我们先看定义(include/command.h)

#define U_BOOT_CMD_MKENT_COMPLETE(_name, _maxargs, _rep, _cmd, \_usage, _help, _comp) \{ #_name, _maxargs, _rep, _cmd, _usage, \_CMD_HELP(_help) _CMD_COMPLETE(_comp) }#define U_BOOT_CMD_COMPLETE(_name, _maxargs, _rep, _cmd, _usage, _help, _comp) \ll_entry_declare(cmd_tbl_t, _name, cmd) = \U_BOOT_CMD_MKENT_COMPLETE(_name, _maxargs, _rep, _cmd, \_usage, _help, _comp);#define U_BOOT_CMD(_name, _maxargs, _rep, _cmd, _usage, _help) \U_BOOT_CMD_COMPLETE(_name, _maxargs, _rep, _cmd, _usage, _help, NULL)
#define ll_entry_declare(_type, _name, _list) \_type _u_boot_list_2_##_list##_2_##_name __aligned(4) \__attribute__((unused, \section(".u_boot_list_2_"#_list"_2_"#_name)))

看上去挺复杂的,其实就是将cmd放在了u_boot_list这类开头的section里,所以我们只需在u-boot.lds里添加:

. = ALIGN(4);
.u_boot_list : {KEEP(*(SORT(.u_boot_list*)));
}

查看下System.map,我们的命令原来长这个样子:

 0541df64 D _u_boot_list_2_cmd_2_bdinfo0541df80 D _u_boot_list_2_cmd_2_boot0541df9c D _u_boot_list_2_cmd_2_bootd0541dfb8 D _u_boot_list_2_cmd_2_bootelf0541dfd4 D _u_boot_list_2_cmd_2_bootm0541dff0 D _u_boot_list_2_cmd_2_bootp0541e00c D _u_boot_list_2_cmd_2_bootvx0541e028 D _u_boot_list_2_cmd_2_cmp0541e044 D _u_boot_list_2_cmd_2_coninfo0541e060 D _u_boot_list_2_cmd_2_cp0541e07c D _u_boot_list_2_cmd_2_crc32

这样的话我们输入的命令就能正常被解析识别了,折腾了不少时间,看来还得仔细看看其中的区别。

转载于:https://my.oschina.net/u/2007478/blog/422737

u-boot移植问题记录(一)--U_BOOT_CMD区别相关推荐

  1. 基于全志A33开发板linux系统移植学习记录(Boot0)

    基于全志A33开发板linux系统移植学习记录 第一章 Boot0基于ARMGCC的编译与修改 文章目录 基于全志A33开发板linux系统移植学习记录 前言 一.全志A33简介以及上电引导流程 二. ...

  2. 面试官:spring boot和spring究竟有啥区别?

    面试官:spring boot和spring究竟有啥区别? 前言 今天本篇文章主要聚焦说说,spring boot和spring究竟有啥区别,重点对比MVC模块以及Security模块在两大框架使用时 ...

  3. 【嵌入式】MCU(HC32F460)+SPI接口LCD液晶屏ILI9341 移植emWin记录1----点亮LCD屏

    目录 一 SPI屏的接线 二 SPI屏驱动初始化 三 SPI屏点亮 四 附录 一 SPI屏的接线 SPI屏的特点在于接线简单,只需要四根SPI线以及几个GPIO口即可驱动工作,但是由于非并口的,所以当 ...

  4. Spring Boot 2 实践记录之 MyBatis 集成的启动时警告信息问题

    按笔者 Spring Boot 2 实践记录之 MySQL + MyBatis 配置 中的方式,如果想正确运行,需要在 Mapper 类上添加 @Mapper 注解. 但是加入此注解之后,启动时会出现 ...

  5. VC6移植VS2017记录

    VC6移植VS2017记录 1 typedef void * POINTER_64 PVOID64; windows kits\10\include\10.0.16299.0\um\winnt.h(3 ...

  6. selinux移植调试记录

    LINUX平台selinux移植调试记录 前言 什么是selinux 主要作用 selinux的组成 工作模式 工作流程 查看当前的文件或进程的安全上下文 uboot和kernel中的配置 refpo ...

  7. 镜像下载boot.iso和dvd1.iso的区别;dnf:找不到命令;yum和dnf的区别;CentOS Stream和Linux的区别;dnf: command not found

    这里写目录标题 一 linux 的各个系列 二 End dates are coming in 2024 for CentOS Stream 8 and CentOS Linux 7 三 镜像下载bo ...

  8. Spring 和 Spring Boot 最核心的 3 大区别,详解!

    概述 对于Spring和SpringBoot到底有什么区别,我听到了很多答案,刚开始迈入学习SpringBoot的我当时也是一头雾水,随着经验的积累.我慢慢理解了这两个框架到底有什么区别,相信对于用了 ...

  9. java部署jar还是war优劣_详解Spring Boot 部署jar和war的区别

    本文介绍了Spring Boot 部署jar和war两种方式的区别,分享给大家,具体如下: 1. packaging的方式不同,一种设置成jar一种是war xsi:schemaLocation=&q ...

最新文章

  1. EBS 抓trace 文件
  2. 单链表-两个线性表的合并1(破环原链表+尾插法)
  3. 如何在Bash中加入数组元素?
  4. 移动端微信页面的一些自己爬的坑
  5. python 正则表达式 re.search
  6. python locust最新版_python locust 性能测试:locust安装和一些参数介绍
  7. javascript中interval与setTimeOut的区别
  8. java三判式,Java编程设计模式,第 3 部分
  9. 三星电子首次公布李在镕薪酬 看起来一点儿也不高
  10. JavaScript事件小结
  11. 微信公众平台开发视频教程
  12. 音视频基础之YUV格式
  13. 触摸屏一体机的类型有哪些
  14. WorldPress中文乱码问题
  15. openlayers 仿CAD(1)
  16. 从键盘上输入一个字符,如果它是小写字母,则把它转换成大写字母输出;否则,直接输出。
  17. 常用html/css/js学习(会持续更新)
  18. Spark First Sample Demo
  19. 20181027解题报告
  20. 数字逻辑 异或 同或

热门文章

  1. SAP MM ME1M报表结果真的不科学?
  2. SAP MM 物料主数据consumption视图数据的更新?
  3. Python 之 Pandas (二)选择数据
  4. 深入理解网络最大流和Ford-Fulkson算法
  5. 离奇的梦境,能够防范大脑过拟合
  6. DeepMind新突破!首次用深度学习从第一性原理计算分子能量
  7. MEMS惯性传感器有哪些趋势?
  8. 为什么数学是理解世界的最佳方式
  9. 人工智能影响未来娱乐的31种方式
  10. 万物智联时代——2018年AIOT产业蓝皮书正式发布