在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

uboot自定義命令

嵌入式技術 ? 2022-09-17 09:59 ? 次閱讀

uboot自定義命令

U-Boot 是一個主要用于嵌入式系統的引導加載程序,可以支持多種不同的計算機系統結構,包括PPC、ARM、AVR32、MIPS、x86、68k、Nios與MicroBlaze。這也是一套在GNU通用公共許可證之下發布的自由軟件。

U-Boot本質是一個裸機程序,是一種普遍用于嵌入式系統中的開源的Bootloader,作用是用來引導操作系統,以及給開發人員提供測試調試工具。主要負責基本硬件初始化,導啟動內核啟動。

U-Boot命令眾多,通過uboot命令可完成系統環境變量設置。U-Boot本質就是一份裸機程序,這樣可以在U-Boot命令下調試一些硬件設備問題。U-Boot命令行也是可以實現自動補全功能。

1.uboot命令格式分析

??uboot命令存放在uboot目錄下的common目錄下。
??do_help命令功能實現如下:

extern cmd_tbl_t  __u_boot_cmd_bdinfo;
extern cmd_tbl_t  __u_boot_cmd_showvar;

int do_help(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
{
//	return _do_help(&__u_boot_cmd_start,
//			&__u_boot_cmd_end - &__u_boot_cmd_start,
//			cmdtp, flag, argc, argv);
	return _do_help(&__u_boot_cmd_bdinfo,
			&__u_boot_cmd_showvar - &__u_boot_cmd_bdinfo + 1,
			cmdtp, flag, argc, argv);
}

U_BOOT_CMD(
	help,	CONFIG_SYS_MAXARGS,	1,	do_help,
	"print command description/usage",
	"\n"
	"	- print brief description of all commands\n"
	"help command ...\n"
	"	- print detailed usage of 'command'"
);

/* This does not use the U_BOOT_CMD macro as ? can't be used in symbol names */
cmd_tbl_t __u_boot_cmd_question_mark Struct_Section = {
	"?",	CONFIG_SYS_MAXARGS,	1,	do_help,
	"alias for 'help'",
#ifdef  CONFIG_SYS_LONGHELP
	""
#endif /* CONFIG_SYS_LONGHELP */
};

U_BOOT_CMD為命令參數傳遞:

help 命令標志符;
CONFIG_SYS_MAXARGS命令傳遞的最大參數個數;
1 命令重復執行次數;

do_help命令實現函數;

“alias for ‘help’”命令用法說明;
最后一個參數為命令用法詳細說明;
int do_help(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])函數參數說明:
cmd_tbl_t * cmdtp結構體指針。

struct cmd_tbl_s {
	char		*name;		/* 命令名字*/
	int		maxargs;	/*命令傳遞的最大參數個數*/
	int		repeatable;	/*命令重復執行次數*/
	/*命令功能實現函數*/
	int		(*cmd)(struct cmd_tbl_s *, int, int, char * const []);
	char		*usage;		/*命令基本用法說明*/
#ifdef	CONFIG_SYS_LONGHELP
	char		*help;		/*命令詳細用法說明*/
#endif
#ifdef CONFIG_AUTO_COMPLETE
	/* do auto completion on the arguments */
	int		(*complete)(int argc, char * const argv[], char last_char, int maxv, char *cmdv[]);
#endif
};

??argc 命令傳入的參數個數,和main函數argc相同;
??argv 存放命令參數內容,和main函數argv相同;

2.tiny4412下編寫uboot命令控制蜂鳴器

2.1 tiny4412開發板beep硬件接口

ef6cda5fbf0f4b1a8da4d958cce9a78f.png#pic_centerpYYBAGMkcm6AXPogAALTlgSByik812.png#pic_center

2.2 GPD0端口寄存器地址

poYBAGMkcm6AcMBRAAFIVeaUTtI745.png#pic_center

??配置寄存器:GPD0CON_ADDR = 0x1140_0000 + 0x00A0

pYYBAGMkcm6ATcutAADx1i9W8rc441.png#pic_center

2.3 參考help命令模板實現beep命令

#include 
#include 

/*蜂鳴器*/
#define GPD0_CON *((volatile unsigned int *)0x114000A0)//控制寄存器
#define GPD0_DAT *((volatile unsigned int *)0x114000A4)//數據寄存器

int do_beep(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
{
	/*蜂鳴器*/
	GPD0_CON&=0xfffffff0;//清除當前GPD0_0的配置
	GPD0_CON|=0x00000001;//設置為輸出模式
	//beep on 或者 beep off
	if(argc!=2)
	{
		printf("格式:beep on/off\n");
		return 0;
	}
	if(strcmp(argv[1],"on")==0)//開蜂鳴器
	{
		GPD0_DAT|=1<<0;//開蜂鳴器
	}
	else if(strcmp(argv[1],"off")==0)//關蜂鳴器
	{
		GPD0_DAT&=~(1<<0);//關蜂鳴器
	}	
	return 0;
}

U_BOOT_CMD(
	beep,	CONFIG_SYS_MAXARGS,	1,	do_beep,
	"beep ",
	"\n"
	"beep用法\n"
	"開蜂鳴器:beep on\n"
	"關蜂鳴器:beep_off"
);

2.4 程序編譯

??1. 將cmd_beep.c拷貝到u_boot目錄下的common目錄下

[wbyq@wbyq common]$ cp /mnt/hgfs/ubuntu/cmd_beep.c ./ 

??2. 修改common目錄下的Makefile文件。

[wbyq@wbyq common]$ vim  Makefile 
poYBAGMkcm6AfN_oAAFMLThhXZ8381.png#pic_center

??3.在uoot頂層目錄下執行make,重新編譯uboot

[wbyq@wbyq uboot_tiny4412-sdk1506]$ make

??4.燒寫uboot

[wbyq@wbyq uboot_tiny4412-sdk1506]$ cd sd_fuse/
[wbyq@wbyq tiny4412]$ sudo ./sd_fusing.sh /dev/sdb

??beep命令編寫成功。

pYYBAGMkcm-ASnF_AADRQDhKR-0795.png#pic_center

??5. beep命令運行測試

TINY4412 # beep
格式:beep on/off
TINY4412 # ? beep
flag=0
beep - beep 

Usage:
beep 
beep用法
開蜂鳴器:beep on
關蜂鳴器:beep_off
TINY4412 # beep on
TINY4412 # beep off

3.分析uboot保存環境變量位置

??在Linux操作系統啟動前,uboot需要完成系統環境變量配置。在uboot目錄下有tiny4412.h中保存的系統的默認環境變量參數。

poYBAGMkcm-AMDrDAAFgzLO4XXs676.png#pic_center

?1.當我們修改了系統環境變量,執行了saveenv命令后,則環境變量將寫入到磁盤中,接下來我們將分析一下uboot源碼中環境變量寫入磁盤的扇區位置。
在uboot命令中,并沒有直接腳cmd_save.c的函數,因此,我們可以根據saveenv命令執行后的提示信息來分析。在uboot命令行下執行saveenv命令時,會看到有輸出提示信息,這樣我們可以直接在uboot工程中搜索一下輸出信息的位置。

TINY4412 # save
Saving Environment to SMDK bootable device...
done
pYYBAGMkcnCALbAJAAD532Jzw_c480.png#pic_centerpoYBAGMkcnCAfvXyAAB29DuDE98521.png#pic_centerpYYBAGMkcnCAWdkIAAEzPuewygQ374.png#pic_center

??2.接下來跳入saveenv函數,查看一下該函數執行過程。

poYBAGMkcnGAfeBFAAFJvadUxmc007.png#pic_center

??當我們跳到定義處時會看到有多重位置,要想準確跳轉到正確位置,我們可以再查找參考saveenv命令的后半段提示信息賦值位置。

pYYBAGMkcnKAW0_TAADLA9vI1v8189.png#pic_centerpoYBAGMkcnKAOqhnAABkB5T6EHE816.png#pic_center

?3.經過查找參考我們發現,后半段提示信息的定義位置是在env_auto.c中,而我們saveenv函數右鍵跳到定義處時在env_auto.c中也有定義,說明我們要跳轉的文件即為env_atuo.c文件。

在 saveenv函數中,并沒有看到有關于mmc寫扇區的函數,說明我們還需要進一步跳轉到對應的子函數中去分析。

pYYBAGMkcnOAHNmGAAHFZGjF75w395.png#pic_center

??4.我們可以再次根據saveenv命令的打印提示,在最后還會打印“done”這個信息,這樣我們就可以更新這個信息,對當前函數中的三個子函數進行分析,看下哪一個子函數中有這個字符串的打印。經過查看代碼可知最終調用的函數即為saveenv_movinand()函數。

poYBAGMkcnOAPXwxAAFdmqd4NEs124.png#pic_center

??5.再次跳到movi_write_env()函數中查看一下寫入到mmc中的地址。

pYYBAGMkcnSAR9fCAAFTGQPcPVU089.png#pic_center

??6.在這個函數中即為實現環境變量寫入作用,再次跳到movi_write()函數中查看一下這個函數參數作用。

poYBAGMkcnWAfeGJAACy5x8ktDY303.png

??可以看到,movi_write()函數參數作用分別為:mmc設備編號、寫入mmc的起始扇區、寫入的扇區個數、寫入的環境變量內容。
??我們可以在這個函數中加入printf函數打印一下寫入的扇區地址和扇區數量。然后再重新編譯uboot,燒寫到SD卡中再次啟動查看效果。

TINY4412 # save
Saving Environment to SMDK bootable device...
start=1025,blkcnt=32
done
TINY4412 # 

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11469

    瀏覽量

    212895
  • Uboot
    +關注

    關注

    4

    文章

    128

    瀏覽量

    28920
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    HarmonyOS應用自定義鍵盤解決方案

    自定義鍵盤是一種替換系統默認鍵盤的解決方案,可實現鍵盤個性化交互。允許用戶結合業務需求與操作習慣,對按鍵布局進行可視化重構、設置多功能組合鍵位,使輸入更加便捷和舒適。在安全防護層面,自定義鍵盤可以
    的頭像 發表于 06-05 14:19 ?378次閱讀

    LabVIEW運動控制(三):EtherCAT運動控制器的高效加工指令自定義封裝

    LabVIEW高效加工指令自定義封裝
    的頭像 發表于 04-08 13:49 ?2160次閱讀
    LabVIEW運動控制(三):EtherCAT運動控制器的高效加工指令<b class='flag-5'>自定義</b>封裝

    如何使用Linux映像在IMX8ULP上啟用自定義logo?

    /work-shared/imx8ulp-lpddr4-evk/kernel-source/drivers/video/logo)替換為我的自定義徽標,該徽標使用以下命令轉換為 ppm 格式: >
    發表于 03-31 06:30

    如何添加自定義單板

    在開發過程中,用戶有時需要創建自定義板配置。本節將通過一個實例講解用戶如何創建屬于自己的machine,下面以g2l-test.conf為例進行說明。
    的頭像 發表于 03-12 14:43 ?493次閱讀

    如何快速創建用戶自定義Board和App工程

    概述自HPM_SDKv1.7.0發布開始,在HPM_ENV中新增了user_template文件夾,以方便用戶快速創建自定義的Board和App工程。user_template是用戶模板工程,用戶
    的頭像 發表于 02-08 13:38 ?419次閱讀
    如何快速創建用戶<b class='flag-5'>自定義</b>Board和App工程

    Altium Designer 15.0自定義元件設計

    電子發燒友網站提供《Altium Designer 15.0自定義元件設計.pdf》資料免費下載
    發表于 01-21 15:04 ?0次下載
    Altium Designer 15.0<b class='flag-5'>自定義</b>元件設計

    think-cell:自定義think-cell(四)

    C.5 設置默認議程幻燈片布局 think-cell 議程可以在演示文稿中使用特定的自定義布局來定義議程、位置和議程幻燈片上的其他形狀,例如標題或圖片。通過將此自定義布局添加到模板,您可以為整個組織
    的頭像 發表于 01-13 10:37 ?457次閱讀
    think-cell:<b class='flag-5'>自定義</b>think-cell(四)

    智能語音識別照明解決方案,平臺自定義,中英切換

    智能語音識別照明方案引入NRK3502芯片,支持平臺自定義,離線控制,中英雙語切換。NRK3502具備高性能和靈活自定義能力,可推動智能照明革新,控制其他智能設備,為國際用戶提供全方位智能生活體驗。
    的頭像 發表于 01-10 13:23 ?372次閱讀
    智能語音識別照明解決方案,平臺<b class='flag-5'>自定義</b>,中英切換

    think-cell;自定義think-cell(一)

    本章介紹如何自定義 think-cell,即如何更改默認顏色和其他默認屬性;這是通過 think-cell 的樣式文件完成的,這些文件將在前四個部分中進行討論。 第五部分 C.5 設置默認議程幻燈片
    的頭像 發表于 01-08 11:31 ?638次閱讀
    think-cell;<b class='flag-5'>自定義</b>think-cell(一)

    TPS659xx應用程序自定義工具

    電子發燒友網站提供《TPS659xx應用程序自定義工具.pdf》資料免費下載
    發表于 11-06 10:02 ?0次下載
    TPS659xx應用程序<b class='flag-5'>自定義</b>工具

    創建自定義的基于閃存的引導加載程序(BSL)

    電子發燒友網站提供《創建自定義的基于閃存的引導加載程序(BSL).pdf》資料免費下載
    發表于 09-19 10:50 ?0次下載
    創建<b class='flag-5'>自定義</b>的基于閃存的引導加載程序(BSL)

    如何創建TestStand自定義步驟

    在之前的課程中簡單地介紹過TestStand自帶的一些步驟類型,如測試、消息彈窗、賦值、標簽等等,這些簡單的步驟從TestStand的插入選版中就可以添加到序列中。那么在使用中如果碰到需要實現更加靈活、復雜的功能,使用自帶的一些步驟類型可能難以滿足,這時就需要使用到自定義步驟。
    的頭像 發表于 09-11 14:46 ?2225次閱讀
    如何創建TestStand<b class='flag-5'>自定義</b>步驟

    請問multisim怎么自定義元器件?

    為什么我在multisim中自定義元器件始終出不了想要的波形效果呢?同一個pspice模型我同學之前都定義正確了,現在我想再來試一下結果一直失敗
    發表于 09-10 06:16

    EtherCAT運動控制器PT/PVT實現用戶自定義軌跡規劃

    EtherCAT運動控制器PT/PVT實現用戶自定義軌跡規劃。
    的頭像 發表于 08-15 11:49 ?1110次閱讀
    EtherCAT運動控制器PT/PVT實現用戶<b class='flag-5'>自定義</b>軌跡規劃

    NVIDIA NeMo加速并簡化自定義模型開發

    如果企業希望充分發揮出 AI 的力量,就需要根據其行業需求量身定制的自定義模型。
    的頭像 發表于 07-26 11:17 ?1155次閱讀
    NVIDIA NeMo加速并簡化<b class='flag-5'>自定義</b>模型開發
    主站蜘蛛池模板: 亚洲综合色网站 | 日韩一级免费毛片 | 亚洲一本高清 | 亚洲第一区视频在线观看 | 午夜影院404 | 日本黄色网址视频 | 久久国产精品免费专区 | 一区二区三区视频免费观看 | 国产在线美女 | 唐人呦一呦xxxx视频 | 国产亚洲视频在线播放大全 | 18性夜影院午夜寂寞影院免费 | 日本拍拍视频 | 亚洲jizzjizz中文在线播放 | 色视频在线观看网站 | 欧美日本视频一区 | 欧美激情区 | 美国一级大黄香蕉片 | 全黄毛片 | 日本三级a | 一本到卡二卡三卡免费高 | 天天看片夜夜爽 | 欧美高清xx| 奇米77| 黄色三级网站 | 国产日本三级 | 双性受粗大撑开白浊 | 成人免费精品视频 | 最近国语剧情视频在线观看 | 欧美三级黄色 | 激情五月五月婷婷 | 日本三区四区免费高清不卡 | 亚洲综合成人网在线观看 | 又大又粗又爽黄毛片 | 日本二区免费一片黄2019 | 永久看片| 国产日本久久久久久久久婷婷 | 久久精品伊人波多野结 | 赛罗奥特曼银河帝国普通话免费版 | 男女交性视频免费播放视频 | 成人午夜免费剧场 |