实验u-boot版本 1.1.6
1、创建源文件
在common目录下创建源文件,文件名称建议以Cmd_xxx.c(Cmd_+小写命令名称)形式命名。
2、添加头文件
#include <common.h>
#include <watchdog.h>
#include <command.h>
#include <image.h>
#include <malloc.h>
#include <zlib.h>
#include <bzlib.h>
#include <environment.h>
#include <asm/byteorder.h>
- 注:暂未搞清楚个头文件作用,可能并不是所有头文件都需要!
3、编写命令对应的函数
不同命令,对应的函数操作不同,这里以输出hello world为例:
int do_hello (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
int i;
printf("Hello World!,%d\n",argc);
for(i=0; i<argc; i++)
{
printf("argv[%d] = %s\n",i,argv[i]);
}
return 0;
}
函数名称其实是拷贝了别的命令函数名称,仅仅把名称修改为do_hello。
int do_hello (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
4、添加命令结构体
U_BOOT_CMD(
hello, CFG_MAXARGS, 1, do_hello,
"hello - printf hello world test\n",
"[addr [arg ...]]\n - Long help\n"
"\tLong help, second line\n"
"\tlong help third line\n"
);
其实也是拷贝了其他命令的结构体修改而来。
至此源文件已经创建和编写完毕,保存。
5、修改Makefile文件
修改common目录下的Makefile文件,
COBJS = main.o ACEX1K.o altera.o bedbug.o circbuf.o \
cmd_ace.o cmd_autoscript.o \
cmd_bdinfo.o cmd_bedbug.o cmd_bmp.o cmd_boot.o cmd_bootm.o \
cmd_cache.o cmd_console.o \
cmd_date.o cmd_dcr.o cmd_diag.o cmd_display.o cmd_doc.o cmd_dtt.o \
cmd_eeprom.o cmd_elf.o cmd_ext2.o \
cmd_fat.o cmd_fdc.o cmd_fdos.o cmd_flash.o cmd_fpga.o \
cmd_i2c.o cmd_ide.o cmd_immap.o cmd_itest.o cmd_jffs2.o \
cmd_load.o cmd_log.o \
cmd_mem.o cmd_mii.o cmd_misc.o cmd_mmc.o \
cmd_nand.o cmd_net.o cmd_nvedit.o \
cmd_pci.o cmd_pcmcia.o cmd_portio.o \
cmd_reginfo.o cmd_reiser.o cmd_scsi.o cmd_spi.o cmd_universe.o \
cmd_usb.o cmd_usbslave.o cmd_menu.o cmd_vfd.o \
command.o console.o devices.o dlmalloc.o docecc.o \
environment.o env_common.o \
env_nand.o env_dataflash.o env_flash.o env_eeprom.o \
env_nvram.o env_nowhere.o \
exports.o \
flash.o fpga.o ft_build.o \
hush.o kgdb.o lcd.o lists.o lynxkdi.o \
memsize.o miiphybb.o miiphyutil.o \
s_record.o serial.o soft_i2c.o soft_spi.o spartan2.o spartan3.o \
usb.o usb_kbd.o usb_storage.o \
virtex2.o xilinx.o crc16.o xyzModem.o cmd_mac.o cmd_hello.o
末尾添加cmd_hello.o。
6、编译
执行make命令,对源文件进行编译,没有错误的话,即可产生uboot.bin文件。烧录进开发板对新增的命令进行测试。