08 uboot上增加自己的命令

2021-08-01 21:20:22 字數 2924 閱讀 1659

在實現前需了解lds和裡面的段

在uboot原始碼目錄裡include/command.h:

struct cmd_tbl_s ;

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

//////

//////

//////

//////

//////

//////

//////

//////

//////

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

uboot裡命令統一放在原始碼目錄裡的cmd目錄.每個檔案表示一類或乙個命令.

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

cmd_mytest.c

#include

#include

int do_mytest(struct cmd_tbl_s *tbl, int flag, int argc, char * const argv)

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

2234

55in 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)

; // fatload mmc 0:1 0x42000000 /uimage

char *argvs_uimage = ;

// bootm 0x42000000

char *argvs_bootm = ;

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");

ubuntu上u boot的編譯

2,將windows中的u boot複製到ubuntu虛擬機器中自定義目錄並解壓 3,進入該目錄cd 4,安裝dtc sudo apt get install device tree compiler 5,安裝openssl的依賴 sudo apt get install libssl dev 6,...

u boot 上移植新的 lcd 驅動

本移植過程假設使用者使用者是從給定的 demo 板開發自己的新產品。1 board myboard myboard.c 該檔案增加如下 下面的結構體中配置 lcd 的引數 然後根據需要調整 define mux default es2 位置開始 gpio 口定義 include ifdef conf...

怎樣在uboot上建立選單 menu ?

一 原理 uboot選單其實就是乙個uboot中的命令,和其他的命令沒有什麼差別。uboot啟動時,如果進入uboot命令模式,先執行這個命令,就會列印出乙個選單介面。在uboot的命令模式,通過鍵入 menu 命令,同樣可以調出這個介面。二 操作步驟 1 在uboot的common目錄下建立cmd...