u-boot中添加自定义命令
1.u-boot命令机制
u-boot中,每个命令都使用一个struct cmd_tbl_s结构体定义,该定义在include/command.h中实现:
struct cmd_tbl_s{
char *name,//u-boot中执行的命令
int maxargs,//命令所能带的参数个数,最少为1
int repeatable,//该命令是否可重复
int (*cmd)(struct cmd_tbl_s *,int,int,char*[]),//指向该命令对应的源函数
char *usage,//命令的使用提示
char *help//在线帮助信息
}; u-boot中定义的命令能与具体的函数程序相对应,通过指针 int (*cmd)(struct cmd_tbl_s *,int,int,char*[]) 实现。 在include/command.h中定义了U_BOOT_CMD宏:
#define Struct_Section __attribute__ ((unused,section (".u_boot_cmd"))) #define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) \
cmd_tbl_t __u_boot_cmd_##name Struct_Section = {#name, maxargs, rep, cmd, usage} “##”与"#"都是预编译操作符,“##”有字符串连接功能,"#"表示后面紧跟的是一个字符串。
宏 U_BOOT_CMD(name, maxargs, rep, cmd, usage, help) 就是将
struct cmd_tbl_s {
char *name,
int maxargs,
int repeatable,
int (*cmd)(struct cmd_tbl_s *,int,int,char*[]),
char *usage,
char *help
};
这样的一个命令结构体放到U-BOOT连接脚本 board/xxx/u-boot.lds中定义的".u-boot_cmd"段所在的内存区域.当用户在u-boot的shell中输入命令时,就会在".u_boot_cmd"这个内存区域中查找,当该区域中某一个cmd_tbl_s命令结构体的
cmd_tbl_s.name和输入的命令字符串相符时,就调用该命令结构体的cmd_tbl_s.cmd()函数. 2.添加自定义命令
自定义命令设为"myubootcmd",不可与u-boot命令重名, <1>添加命令行配置信息,在u-boot-1.3.2/include/configs/smdk2410.h中添加 #define CONFIG_CMD_MYUBOOT,如下:
#define CONFIG_CMD_CACHE
#define CONFIG_CMD_DATE
#define CONFIG_CMD_ELF
#define CONFIG_CMD_PING
#define CONFIG_CMD_NET
#define CONFIG_CMD_MYUBOOT <2>编写命令行对应的源程序,u-boot-1.3.2/board/smdk2410/中添加文件myuboot.c,内容如下所示 #include
#include
#include
#ifdef CONFIG_CMD_MYUBOOT
void myubootcmd(void)
{
printf("Hello,my u-boot!\n");
} U_BOOT_CMD( myuboot, //uboot命令
1, //不带参数
2, //可重复
myubootcmd, //命令对应函数
"hello-my uboot command", //用法提示
"my uboot test command in u-boot 1.3.2\n"//在线帮助信息
);
#endif <3>添加编译 u-boot-1.3.2/board/smdk2410/Makefile 中添加myuboot.o
include $(TOPDIR)/config.mk
LIB = $(obj)lib$(BOARD).a
COBJS := smdk2410.o flash.o myuboot.o <4>编译u-boot
# make smdk2410_config CROSS_COMPILE=arm-linux-
Configuring for smdk2410 board...
# make ARCH=arm CROSS_COMPILE=arm-linux- all <5>运行
SMDK2410
# help myuboot
myuboot my uboot test command in u-boot 1.3.2 SMDK2410
# myuboot
Hello,my u-boot!
SMDK2410 http://blog.sina.com.cn/s/blog_4c02ba150101cp97.html
u-boot中添加自定义命令的更多相关文章
- uboot中添加自定义命令
uboot中可以通过修改源程序来添加自定义命令,进一步扩展uboot的功能. 我想在uboot下添加一条新的命令(名为varcpy),用来拷贝uboot中的环境变量. 修改方式如下: 创建新文件com ...
- 在U-Boot中添加自定义命令以实现自动下载程序【转】
本文转载自:https://gaomf.cn/2016/06/26/%E5%9C%A8U-Boot%E4%B8%AD%E6%B7%BB%E5%8A%A0%E8%87%AA%E5%AE%9A%E4%B9 ...
- linux中添加自定义命令
centos下设置alias别名,比较简单,例如: vim /root/.bashrc addalias rm='rm -i' Linux alias设置指令的别名命令详解 功能说明:设置指令的别名. ...
- uboot中的命令体系
一.uboot的命令体系介绍以及实例分析: U-Boot 的命令实现大多在 common 目录下.在该目录下命令的代码文件都是以“ cmd_”开头的,如下图所示: 其中每一个文件都是一个命令实现的代码 ...
- linux运维中的命令梳理(四)
----------管理命令---------- ps命令:查看进程 要对系统中进程进行监测控制,查看状态,内存,CPU的使用情况,使用命令:/bin/ps (1) ps :是显示瞬间进程的状态,并不 ...
- springboot(十一):Spring boot中mongodb的使用
mongodb是最早热门非关系数据库的之一,使用也比较普遍,一般会用做离线数据分析来使用,放到内网的居多.由于很多公司使用了云服务,服务器默认都开放了外网地址,导致前一阵子大批 MongoDB 因配置 ...
- (转)Spring Boot(十一):Spring Boot 中 MongoDB 的使用
http://www.ityouknow.com/springboot/2017/05/08/spring-boot-mongodb.html MongoDB 是最早热门非关系数据库的之一,使用也比较 ...
- Spring Boot 中配置文件application.properties使用
一.配置文档配置项的调用(application.properties可放在resources,或者resources下的config文件夹里) package com.my.study.contro ...
- 学习Spring Boot:(二十三)Spring Boot 中使用 Docker
前言 简单的学习下怎么在 Spring Boot 中使用 Docker 进行构建,发布一个镜像,现在我们通过远程的 docker api 构建镜像,运行容器,发布镜像等操作. 这里只介绍两种方式: 远 ...
随机推荐
- http 请求报文和响应报文
1.请求报文 示例: 2.响应报文 示例:
- c语言转移符和三字母序列
三字母序列
- 关于android屏幕适配的问题(drawable-xxxxxxxx,dp,sp,px等等),偶尔看到了android源代码,关于dpi的区分的值
上一篇博客说了一下.9.png图片http://blog.csdn.net/qq_23195583/article/details/46737419 当然,点九的是指的能够进行拉伸的.那么假设图片不能 ...
- 转载:PHP JSON_ENCODE 不编码中文汉字的方法
1.PHP版本5.4(包含)+ json_encode($data, JSON_UNESCAPED_UNICODE); //必须PHP5.4+ 2.PHP版本5.4- function encode_ ...
- SpringBoot启动
一.启动时加载数据,就用CommandLineRunner 只需要将类实现CommandLineRunner,并且加上Component注解,还可以通过Order来控制启动顺序. @Component ...
- C#中的Invoke和BeginInvoke
一.Control#Invoke() 和Control#BeginInvoke() 在非UI线程中调用MessageBox.Show()结果是非模态对话框: 在UI线程中调用MessageBox.Sh ...
- python学习笔记011——内置函数dir()
1 描述 dir()函数可以查看(打印)对象的属性和方法.不管时那种对象(python中一切皆对象)类型(数据,模块)都有自己的属性和方法. dir() 函数不带参数时,返回当前范围内的变量.方法和定 ...
- Windows 7 64bit上安装Oracle Database 12c [INS-30131] 错误的解决方法
Windows 7 64bit上安装Oracle Database 12c,出现以下错误: 解决方法: 第一步:控制面板>所有控制面板项>管理工具>服务>SERVER 启动 ...
- 机器学习(3):支持向量机(SVM)
1. 背景: 1.1 最早是由 Vladimir N. Vapnik 和 Alexey Ya. Chervonenkis 在1963年提出 1.2 目前的版本(soft margi ...
- ArraySegmentSample
class Program { static void Main() { , , , , , }; , , , , , , }; ] { , ), , ) }; var sum = SumOfSegm ...