08 uboot上增加自己的命令
来源:互联网 发布:查看数据库命令 编辑:程序博客网 时间:2024/05/29 13:35
在实现前需了解lds和里面的段
在uboot源码目录里include/command.h:struct cmd_tbl_s { char *name; int maxargs; //命令功能函数支持的最大参数的个数 int repeatable; //此命令执行完后,再按"enter"键时是否重复执行. int (*cmd)(struct cmd_tbl_s *, int, int, char * const []); //命令的功能函数 char *usage; // 打"help"时,此命令相关的内容 char *help; // help 命令 ...};typedef struct cmd_tbl_s cmd_tbl_t;#define U_BOOT_CMD(_name, _maxargs, _rep, _cmd, _usage, _help) \ U_BOOT_CMD_COMPLETE(_name, _maxargs, _rep, _cmd, _usage, _help, NULL)191 #define U_BOOT_CMD_COMPLETE(_name, _maxargs, _rep, _cmd, _usage, _help, _comp) \192 ll_entry_declare(cmd_tbl_t, _name, cmd) = \193 U_BOOT_CMD_MKENT_COMPLETE(_name, _maxargs, _rep, _cmd, \194 _usage, _help, _comp);// 这个宏用于声变结构体变量并指定存入在段".uboot_list_2_#_name"150 #define ll_entry_declare(_type, _name, _list) \151 _type _u_boot_list_2_##_list##_2_##_name __aligned(4) \152 __attribute__((unused, \153 section(".u_boot_list_2_"#_list"_2_"#_name)))// 这个宏用于结构全变量的初始化186 #define U_BOOT_CMD_MKENT_COMPLETE(_name, _maxargs, _rep, _cmd, \187 _usage, _help, _comp) \188 { #_name, _maxargs, _rep, _cmd, _usage, \189 _CMD_HELP(_help) _CMD_COMPLETE(_comp) }//////////////////////////////////////////////////////在uboot里增加自定义的命令, 只要实现一个功能函数,再调用U_BOOT_CMD宏即可.uboot里命令统一放在源码目录里的cmd目录.每个文件表示一类或一个命令.如实现一个自己的命令,在cmd目录里:cmd_mytest.c #include <common.h> #include <command.h> int do_mytest(struct cmd_tbl_s *tbl, int flag, int argc, char * const argv[]) { int i; printf("in mytest : \n"); for (i = 0; i < argc ; i++) { printf("argv[%d] : %s\n", i, argv[i]); } return 0; } U_BOOT_CMD(mytest, 5, 1, do_mytest, "mytest - usage of mytest", "help of mytest");修改cmd目录里的Makefile, 在第16行: obj-y += cmd_mytest.o 回到orangepi_sdk目录下: make uboot make install_uboot sdcard=/dev/sdb/////////////////////////////////重新启动后,在uboot上输入 "help"命令: 可以查看到: mytest - mytest - usage of mytest 执行命令: mytest 11 22 34 55 in mytest : argv[0] : mytest argv[1] : 11 argv[2] : 22 argv[3] : 34 argv[4] : 55////////////////////////// 在uboot里每个命令都有一个功能函数,我们可以在自己实现的命令函数里调用其它命令的功能函数来实现相应的功能.如启动系统的命令:extern int do_fat_fsload (cmd_tbl_t *, int, int, char * const []);extern int do_bootm (cmd_tbl_t *, int, int, char * const []);int do_mybootcmd(struct cmd_tbl_s *tbl, int flag, int argc, char * const argv[]){ // fatoad mmc 0:1 0x43000000 /script.bin char *argvs_script[] = {"fatload", "mmc", "0:1", "0x43000000", "/script.bin"}; // fatload mmc 0:1 0x42000000 /uImage char *argvs_uimage[] = {"fatload", "mmc", "0:1", "0x42000000", "/uImage"}; // bootm 0x42000000 char *argvs_bootm[] = {"bootm", "0x42000000"}; if (0 != do_fat_fsload(NULL, 0, 5, argvs_script)) return; if (0 != do_fat_fsload(NULL, 0, 5, argvs_uimage)) return; return do_bootm(NULL, 0, 2, argvs_bootm);}U_BOOT_CMD(mybootcmd, 5, 1, do_mybootcmd, "boot system...", "help of mybootcmd");
阅读全文
0 0
- 08 uboot上增加自己的命令
- 向uboot增加新的命令
- uboot中增加命令
- uboot试验记录-添加自己的命令
- uboot 中添加自己的命令
- 在uboot中添加自己的命令
- 在uboot中添加自己的命令
- uboot中添加自己的命令
- 在uboot中添加自己的命令
- 为uboot增加自定义命令
- uboot中添加一条自己的命令-Nazgul
- cvsnt上增加用户的命令
- 在linux 上的oracle sqlplus 上增加命令记忆
- 为Equinox的控制台(Console)增加自己的命令
- 给PATH环境变量增加自己的命令搜索路径
- uboot命令的实现
- uboot命令的U_BOOT_CMD
- uboot的命令体系
- centos7上使用ansible+murder分发文件
- 【CPU + GPU版】Ubuntu16.04 + caffe + Anaconda2 + OpenCV3.x(附:问题集锦+测试案例)
- Python学习之旅-9
- kafka文件存储机制那些事
- java中根据输入的数字输出空心菱形和实心菱形
- 08 uboot上增加自己的命令
- 原生JavaScript实现Ajax(二):同步,异步,GET,POST
- spring mvc中得/和/*的区别
- 凸包
- spark、es、java精确匹配
- Java7并发编程指南——第一章:线程管理
- Java 实例
- Problem B: 平面上的点——Point类 (II)
- hibernate-关系映射-多对多(单向)-11