完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
宏定义如下,“##”与“#”都是预编译操作符,“##”有字符串连接的功能,“#”表示后面紧接着的是一个字符串。 #define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) cmd_tbl_t __u_boot_cmd_##name struct_section = {#name, maxargs, rep, cmd, usage, help} uboot中所有的命令都在连接脚本u-boot.lds中定义的".u_boot_cmd"段保存: . = .; __u_boot_cmd_start = .; /*将 __u_boot_cmd_start指定为当前地址 */ .u_boot_cmd : { *(.u_boot_cmd) } __u_boot_cmd_end = .; /* 将__u_boot_cmd_end指定为当前地址 */ 下面以添加一个hello命令为例说明添加命令的方法和步骤。 (1)首先,在common目录下添加一个cmd_hello.c文件,保存命令相关的代码。Uboot中一般把通用命令相关代码放在common目录下,并且习惯以“cmd_<命令名>.c”为文件名。 (2) 定义“hello”命令 U_BOOT_CMD( hello, 2, 0, do_hello, "show hello uboot n", " show hello ubootn" ); (3) 实现命令的函数 在cmd_hello.c中添加“hello”命令的响应函数的实现。 int do_hello (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { printf(“hello ubootn”); return 0; } (4) 将common/cmd_hello.c编译进u-boot.bin 在common/Makefile中加入如下代码: COBJS-$(CONFIG_BOOT_HELLO) += cmd_hello.o 在include/configs/mini2440.h加入如代码: [td=553] #define CONFIG_BOOT_HELLO 重新编译下载U-Boot就可以使用hello命令了。 (5)hello命令执行的过程 在U-Boot中输入“hello”命令执行时,U-Boot接收输入的字符串“hello”,传递给run_command函数。run_command函数调用common/command.c中实现的find_cmd函数在__u_boot_cmd_start与__u_boot_cmd_end间查找命令,并返回menu命令的cmd_tbl_t结构。然后run_command函数使用返回的cmd_tbl_t结构中的函数指针调用hello命令的响应函数do_hello,从而完成了命令的执行。 |
|
|
|
开启全新AI时代 智能嵌入式系统快速发展——“第六届国产嵌入式操作系统技术与产业发展论坛”圆满结束
2163 浏览 0 评论
2024 RT-Thread全球巡回线下培训火热来袭!报名提问有奖!
16803 浏览 11 评论
2347 浏览 0 评论
IaaS+on+DPU(IoD)+下一代高性能算力底座技术白皮书
3751 浏览 0 评论
飞凌嵌入式-ELFBOARD 常用的USB接口及其不同版本介绍第1期
1281 浏览 0 评论
69236 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-27 06:45 , Processed in 0.516316 second(s), Total 34, Slave 27 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号