娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

在u-boot中添加命令

發布者:Qinghua2022最新更新時間:2024-08-30 來源: cnblogs關鍵字:u-boot 手機看文章 掃描二維碼
隨時隨地手機看文章

u-boot是嵌入式系統中廣泛使用的一種bootloader。它不僅支持眾多的平臺和參考板,而且支持豐富的命令,可以讓用戶對開發板進行各種操作。關于u-boot使用和移植的資料很多,這里不再贅述。下面用問答的方式介紹u-boot中命令的實現機制。

Q1: u-boot中命令的實現代碼在什么地方?

A1: 在u-boot源碼的common目錄下。通常一個或多個命令在對應的某個C文件中實現。如果用戶要增加一個新命令的話,要在common目錄下添加對應的C文件,并在Makefile中指定編譯該文件。

Q2: 能不能給個命令的實現模板先?

A2: #include
               #include

       int do_hello(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
               {
                       printf(“hello worldn”);
                       return 0;
               }
               U_BOOT_CMD(hello, CONFIG_SYS_MAXARGS, 1, do_hello, “usage info”,  “help info”);

以下是上面代碼的解釋:

U_BOOT_CMD是u-boot中定義的宏,上面的宏定義展開后如下:

cmd_tbl_t __u_boot_cmd_hello Struct_Section = {“hello”, CONFIG_SYS_MAXARGS, 1, do_hello, “usage info”, “help info”};

這下清楚了,實際上就是定義一個類型為cmd_tbl_t的結構體并對其賦值。

u-boot中每個命令都用這樣的一個結構體來描述,類型定義如下:

typedef struct cmd_tbl_s cmd_tbl_t;
        struct cmd_tbl_s {
                char *name;        // 命令的名稱
                int maxargs;        // 最多支持的參數的個數
                int repeatable;        // 是否可重復執行
                int (*cmd)(struct cmd_tbl_s *, int, int, char *const[]);        // 命令對應的處理函數
                char *usage;        // 命令簡要使用信息
                char *help;        // 命令詳細幫助信息
        }

成員cmd是個函數指針,需要指向該命令對應的處理函數。這也是在前面的模板中先定義一個處理函數的原 因。所有命令的處理函數的接口都是一致的:參數cmdtp指向命令對應的cmt_tbl_t結構體;參數flag可以忽略不處理;參數argc和參數 argv的作用和它們在main函數中是一樣的。

Q3: 當用戶輸入命令后,u-boot是如何執行的?

A3: 前面用U_BOOT_CMD定義結構體時用到了另外一個宏Struct_Section,它表示把該結構體放到一個專門的段。u_boot_cmd,沒錯,u-boot中所有命令對應的結構體都集中放在這個段里,該段里的內容會被包含在編譯好的u-boot里。

這下就容易理解了:u-boot接收到用戶的命令后在.u_boot_cmd段中依次查找每個 cmd_tbl_t,根據成員name比較是否和用戶命令匹配。若成功則執行第三個成員cmd指向的函數,否則查找下個cmd_tbl_t。具體的實現請 參考u-boot中的函數find_cmd的代碼。

小結:在我看來,u-boot不僅是一個功能強大的bootloader,而且是一個很好的嵌入式編程的學習對象,其中很多編程的思想和實現的方法都值得大家借鑒。


關鍵字:u-boot 引用地址:在u-boot中添加命令

上一篇:U-Boot添加menu命令的方法及U-Boot命令執行過程
下一篇:常用 U-boot命令詳解

0

推薦閱讀最新更新時間:2025-03-28 11:52

[國嵌筆記][030][U-Boot工作流程分析]
uboot工作流程分析 程序入口 1.打開頂層目錄的Makefile,找到目標smdk2440_config的命令中的第三項(smdk2440) 2.進入目錄board/samsung/smdk2440/,找到u-boot.lds文件。uboot的鏈接都是由這個鏈接器腳本來控制的 3.打開u-boot.lds文件,找到.text(代碼段)的第一個文件cup/s3c24xx/start.o,該文件就是uboot的入口代碼。鏈接器腳本中的ENTRY用來表明整個程序的入口,那么標號_start就是整個程序的入口 4.第一階段入口在cup/s3c24xx/start.S文件的_start處 5.第二階段入口在lib_arm/board.c
[單片機]
[國嵌筆記][030][<font color='red'>U-Boot</font>工作流程分析]
基于Ok6410開發板u-boot的移植
前提環境:Win7+VirsualBox+ok6410+u-boot-2010.03 一,下載u-boot-2010.03源碼 ftp://ftp.denx.de/pub/u-boot 解壓,我這里為了避免麻煩,更改了所有文件的權限 tar jxvf u-boot-2010.03.tar.bz2 sudo chmod -R 777 u-boot-2010.03/* 二,修改源碼 為了方便修改,查找代碼,你看到u-boot下包含了支持眾多CPU和不同架構的代碼,這里我根據Ok6410開發板的自身情況,將u-boot下代碼進行精簡: 1,進入u-boot-2010.03/board,把除samsu
[單片機]
TQ2440 學習筆記—— 27、移植U-Boot【Bootloader 作用、工作流程】
一、Bootloader 簡介 1、系統上電之后,需要一段程序來進行初始化:關閉WATCHDOG、改變系統時鐘、初始化存儲控制寄存器、將更多的代碼復制到內存中等。如果它能將操作系統內核復制到內存中運行,無論從本地(比如Flash)還是從遠端(比如通過網絡),就稱這段程序為Bootloader 。 簡單的說,Bootloader 就是這么一段小程序,它在系統上電時開始執行,初始化硬件設備、準備好軟件環境,最后調用操作系統內核。 2、Bootloader 的啟動方式 CPU 上電后,會從某個地址開始執行。比如MIPS 結構的CPU 會從0xBFC00000取第一條指令,而ARM 結構的CPU則從地址 0x0000000
[單片機]
TQ2440 學習筆記—— 27、移植<font color='red'>U-Boot</font>【Bootloader 作用、工作流程】
基于S3C2440A的嵌入式U-BOOT千兆網絡功能設計
U—BooT支持網絡功能,在下載操作系統內核和大的文件系統時,比其它不支持網絡的引導加載程序速度更快、更方便。目前U—BOOT僅支持10M/100M的網絡功能,隨著科學技術發展,千兆網絡功能必將大量應用在嵌入式系統中。本文介紹了一種讓U—BOOT支持千兆網絡功能的方法,可以使U—BOOT功能更加強大,使用更加方便。 U—BOOT簡介 U—BOOT的全稱是Universal Boot Loader,它遵循GPL條款的開放源碼項目,支持多種處理器,如ARM、PowerPC、MIPS等,也支持Linux、VxWorks、QNX、RTEMS、ARTOS、LynxOS等嵌入式操作系統。 U-BOOT包含兩種不同的工作模式:啟動加載模式和
[單片機]
基于S3C2440A的嵌入式<font color='red'>U-BOOT</font>千兆網絡功能設計
u-boot-2009.08在mini2440上的移植(六)---增加引導內核功能
移植環境 1,主機環境:VMare下CentOS 5.5 ,1G內存。 2,集成開發環境:Elipse IDE 3,編譯編譯環境:arm-linux-gcc v4.4.3,arm-none-eabi-gcc v4.5.1。 4,開發板:mini2440,2M nor flash,128M nand flash。 5,u-boot版本:u-boot-2009.08 6,參考文章: http://blogold.chinaunix.net/u3/101649/showart.php?id=2105215 http://blogimg.chinaunix.net/blog/upfile2/100811115954.pdf http
[單片機]
添点儿料...
无论热点新闻、行业分析、技术干货……
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 城步| 合川市| 青阳县| 乐昌市| 徐汇区| 开江县| 米脂县| 名山县| 洮南市| 临泽县| 太和县| 聂拉木县| 西峡县| 荃湾区| 福建省| 潮州市| 镇江市| 乌苏市| 桃江县| 申扎县| 张北县| 祁阳县| 丘北县| 离岛区| 前郭尔| 沙雅县| 张北县| 迁西县| 翁牛特旗| 临朐县| 大竹县| 深圳市| 米易县| 洛南县| 西吉县| 大港区| 漾濞| 乌拉特前旗| 迭部县| 临泽县| 广东省|