在U-boot-1.3.4中添加加命令

本文介绍如何在U-Boot中添加自定义命令,包括定义命令结构体、使用宏将命令放入特定内存区域及实现步骤。以HelloWorld命令为例,详细说明了从配置到编译的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:qljt跟u-boot的Makefile里面开发商相对应 ;qljt2440是我开发板的名字

 

原理:
每个命令都有一个命令结构体
struct cmd_tbl_s {
char *name;   /            * 将来在u-boot命令行执行的命令,该字串名字不用""括起来,只要不要与现有函数同名就行*/
int maxargs;                /* 最多有多少个参数,注意至少为1,因为在u-boot命令行执行时命令本身算一个参数*/
int repeatable;            /* 命令是否可重复,可重复是指运行一个命令后,下次敲回车即可再次运行*/
int       (*cmd)(struct cmd_tbl_s *, int, int, char *[]);                                /* 你定义的执行的函数*/
char*usage;                                                                                            /* 使用提示*/
char*help;                                                                                               /* 帮助信息*/
};
去定义它。Cmd为要调用的命令函数!name为该命令名字符串,不要用""括起来,不要与现有函数同名。

 

在u-boot里面有这样的宏
#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, help}

 

宏U_BOOT_CMD(name,maxargs,rep,cmd,usage,help)就是将
cmd_tbl_s{
name,
maxargs,
rep,
cmd,
usage,
help
}这样的一个命令结构体放入内存.u_boot_cmd这个区域,.u_boot_cmd这个域在board/qljt2440/u-boot.lds中定义!在U-boot中的shell中,根据用户输入的命令,就会在.u_boot_cmd这个内存区域中查找,当.u_boot_cmd中某一个cmd_tbl_s命令结构体的cmd_tbl_s.name和输入的命令字符串相符时,就调用该命令
结构体的cmd_tbl_s.cmd( ….)函数!


怎样添加命令函参数!
下面以添加 "Hello Word!" 命令为例!

(1)
在include/configs/qljt2440.h中增加一项:

#define CONFIG_CMD_ASKENV
#define CONFIG_CMD_CACHE
#define CONFIG_CMD_DATE
#define CONFIG_CMD_DHCP
#define CONFIG_CMD_ELF
#define CONFIG_CMD_PING
#define CONFIG_CMD_NAND    //ql18
#define CONFIG_CMD_REGINFO   //ql18
#define  CONFIG_CMD_HELLOWORD

 

(2)
在 /board/qljt/qljt2440/ 目录下添加 helloword.c 文件
内容如下

/*
*!ql add for test add u-boot command
*/
#include <config.h>
#include <common.h>

#ifdef CONFIG_CMD_HELLOWORD
void helloword(void)
{
 qljt_printf("-----------------------------------------------Hello Word!/n");
}
U_BOOT_CMD(
 hello,
 1,
 2,
       helloword,
       "hell  - helloword command ",
       " QL add u-boot command!/n"
);

#endif
(3)

在/board/qljt/qljt2440/ 目录下的Makefile 添加要编译的目标文件
(4)

重新编译u-boot,完毕!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值