u-boot移植问题记录(一)--U_BOOT_CMD区别

我使用的是最新的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_bdinfo
 0541df80 D _u_boot_list_2_cmd_2_boot
 0541df9c D _u_boot_list_2_cmd_2_bootd
 0541dfb8 D _u_boot_list_2_cmd_2_bootelf
 0541dfd4 D _u_boot_list_2_cmd_2_bootm
 0541dff0 D _u_boot_list_2_cmd_2_bootp
 0541e00c D _u_boot_list_2_cmd_2_bootvx
 0541e028 D _u_boot_list_2_cmd_2_cmp
 0541e044 D _u_boot_list_2_cmd_2_coninfo
 0541e060 D _u_boot_list_2_cmd_2_cp
 0541e07c D _u_boot_list_2_cmd_2_crc32

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

时间: 2024-11-05 16:46:05

u-boot移植问题记录(一)--U_BOOT_CMD区别的相关文章

Spring Boot 报错记录

Spring Boot 报错记录 由于新建的项目没有配置数据库连接启动报错,可以通过取消自动数据源自动配置来解决 解决方案1: @SpringBootApplication(exclude = DataSourceAutoConfiguration.class) //@SpringBootApplication @MapperScan("com.example.*") //扫描:该包下相应的class,主要是MyBatis的持久化类. 解决方案2: #去配置文件中配置数据库连接参数 #

spring boot slf4j日记记录配置详解

转 spring boot slf4j日记记录配置详解 2017年12月26日 12:03:34 阅读数:1219 Spring-Boot--日志操作[全局异常捕获消息处理?日志控制台输出+日志文件记录] 最好的演示说明,不是上来就贴配置文件和代码,而是,先来一波配置文件的注释,再来一波代码的测试过程,最后再出个技术在项目中的应用效果,这样的循序渐进的方式,才会让读者更加清楚的理解一项技术是如何运用在项目中的,虽然本篇很简单,几乎不用手写什么代码,但是,比起网上其他人写的同类型的文章来说,我只能

Spring Boot 之日志记录

Spring Boot 之日志记录 Spring Boot 支持集成 Java 世界主流的日志库. 如果对于 Java 日志库不熟悉,可以参考:细说 Java 主流日志工具库 关键词: log4j, log4j2, logback, slf4j 日志格式 控制台输出 彩色打印 文件输出 日志级别 日志组 日志配置文件 Spring Boot 中的日志配置 源码 引申和引用 Spring Boot 内部日志全部使用 Commons Logging 记录,但保留底层日志实现.为 Java Util

String Boot中@Controller和@RestController的区别?

一.@Controller 1.返回JSP.Thymeleaf等templates指定页面,配合视图解析器InternalResourceViewResolver一起使用2.方法之前添加@ResponseBody 注释,返回JSON,XML或自定义mediaType内容到页面请添加链接描述](http://www.askwinds.com) 二.@RestController 无法返回jsp页面,或者html,配置的视图解析器 InternalResourceViewResolver不起作用,返

Spring boot学习(六)Spring boot实现AOP记录操作日志

前言 在实际的项目中,特别是管理系统中,对于那些重要的操作我们通常都会记录操作日志.比如对数据库的CRUD操作,我们都会对每一次重要的操作进行记录,通常的做法是向数据库指定的日志表中插入一条记录.这里就产生了一个问题,难道要我们每次在 CRUD的时候都手动的插入日志记录吗?这肯定是不合适的,这样的操作无疑是加大了开发量,而且不易维护,所以实际项目中总是利用AOP(Aspect Oriented Programming)即面向切面编程这一技术来记录系统中的操作日志. 日志分类 这里我把日志按照面向

MIPS 平台 Android 移植过程记录2_kernel升级 (2.6.29.4 -> 3.0.72)

这部分记录的是kernel的升级, 之前在FPGA上跑了2.6.29的kernel去验证一些IP的功能. 而从google的网站上得到的android的source code是不包含kernel的部分的,kernel需要单独下载. 从google下载后发现是3.0.72的版本. 所以这边记录的就是kernel从2.6.29.4上升级到3.0.72上的过程. 最开始的想法就是, 先找一个3.0上的mips架构下的config档, 然后对比2.6.29上的config档的差异, 将差异弥补即可. 找

MIPS 平台 Android 移植过程记录1_编译环境搭建

在工作的空闲时间, 尝试着在公司的MIPS平台上移植了Android, 把之前记录的遇到的问题贴到blog上来, 做个记录. 1.设置上网代理   /etc/apt/apt.conf, 在文件中添加下面的内容, 注意最后的 ";" 也是需要添加的, 否则会提示这个文件的结束字符不对 Acquire::http:Proxy "user:[email protected]:port/"; 2. Installing the JDK apt-get install ope

NUC972移植工作记录

1. 自动挂载U盘和SD卡问题的解决: http://blog.csdn.net/xdw1985829/article/details/6684968 用的mdev的方法. 在 Linux中我们经常用到U盘.SD卡的挂载问题,每次都手动挂载或卸载非常麻烦,我们可以采取以下方法实现自动挂载或卸载U盘.SD卡 @1: 首先在/etc/init.d/rsC中加入以下语句 echo /sbin/mdev >/proc/sys/kernel/hotplug @2:在/etc/下简历mdev.conf的文件

spring boot的@RequestParam和@RequestBody的区别

尊重原创:https://blog.csdn.net/u013306545/article/details/79071683 一.问题描述 由于项目是前后端分离,因此后台使用的是spring boot,做成微服务,只暴露接口.接口设计风格为restful的风格,在get请求下,后台接收参数的注解为RequestBody时会报错:在post请求下,后台接收参数的注解为RequestParam时也会报错. 二.问题原因 由于spring的RequestParam注解接收的参数是来自于requestH