1. 程式人生 > >09 uboot上新增自己的命令

09 uboot上新增自己的命令

uboot上新增自己的命令


在uboot裡增加自定義的命令:只要實現一個功能函式,再呼叫U_BOOT_CMD巨集即可。

uboot命令統一放在原始碼目錄orangepi_sdk/source/u-boot-2016.07裡的cmd目錄,每個檔案表示一類或一個命令。


實現一個自己的命令,在cmd目錄裡:

1.編寫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(命令名, 最大引數個數, 此命令執行完後再按"enter"鍵時是否重複執行, 命令的功能函式, "打"help"時此命令相關的內容", "help命令"); U_BOOT_CMD(mytest, 5, 1, do_mytest, "mytest - usage of mytest"
, "help of mytest");

2.修改cmd目錄裡的Makefile檔案:

在檔案中# core command# command之間加入內容:
    obj-y += cmd_mytest.o 

3.回到orangepi_sdk目錄下,重新編譯uboot:

make uboot

4.將編譯生成的檔案(output/u-boot/目錄裡的boot.scr、script.bin、u-boot-sunxi-with-spl.bin)拷到sd卡:

make install_uboot sdcard=/dev/sdb      //可以通過此命令拷貝,也可以直接拷過去

5.重新啟動後,在uboot上就有自己的命令了


在自己實現的命令函式裡呼叫其它命令的功能函式來實現相應的功能:

1.若要呼叫系統自帶的命令,找到命令的.c檔案中的功能函式,將static去掉

2.編寫自己定義的命令的.c檔案(如:mycmd.c):

#include <common.h>
#include <command.h>

extern int do_load_serial_bin(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
extern int do_go(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);

int do_my_load_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
    int ret;
    char *myload[] = {"loady", "0x40008000"};

    ret = do_load_serial_bin(NULL, 0, 2, myload);
    if(ret != 0)
        return -1;

    return 0;
}

int do_my_go_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
    int ret;
    char *mygo[] = {"go", "0x40008000"};

    ret = do_go(NULL, 0, 2, mygo);
    if(ret != 0)
        return -1;

    return 0;
}

U_BOOT_CMD(myload, CONFIG_SYS_MAXARGS, 1, do_my_load_cmd, "usage of myload\n", "this is the help of myload which 0x40008000")
U_BOOT_CMD(mygo, CONFIG_SYS_MAXARGS, 1, do_my_go_cmd, "usage of mygo\n", "this is the help of mygo which 0x40008000")

3.修改cmd目錄裡的Makefile檔案:

在檔案中# core command# command之間加入內容:
    obj-y += mycmd.o 

4.回到orangepi_sdk目錄下,重新編譯uboot:

make uboot

5.將編譯生成的檔案(output/u-boot/目錄裡的boot.scr、script.bin、u-boot-sunxi-with-spl.bin)拷到sd卡:

make install_uboot sdcard=/dev/sdb      //可以通過此命令拷貝,也可以直接拷過去

6.重新啟動後,在uboot上就有自己的命令了