chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

uboot自定義命令

嵌入式技術(shù) ? 2022-09-17 09:59 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

uboot自定義命令

U-Boot 是一個(gè)主要用于嵌入式系統(tǒng)的引導(dǎo)加載程序,可以支持多種不同的計(jì)算機(jī)系統(tǒng)結(jié)構(gòu),包括PPC、ARM、AVR32、MIPS、x86、68k、Nios與MicroBlaze。這也是一套在GNU通用公共許可證之下發(fā)布的自由軟件。

U-Boot本質(zhì)是一個(gè)裸機(jī)程序,是一種普遍用于嵌入式系統(tǒng)中的開(kāi)源的Bootloader,作用是用來(lái)引導(dǎo)操作系統(tǒng),以及給開(kāi)發(fā)人員提供測(cè)試調(diào)試工具。主要負(fù)責(zé)基本硬件初始化,導(dǎo)啟動(dòng)內(nèi)核啟動(dòng)。

U-Boot命令眾多,通過(guò)uboot命令可完成系統(tǒng)環(huán)境變量設(shè)置。U-Boot本質(zhì)就是一份裸機(jī)程序,這樣可以在U-Boot命令下調(diào)試一些硬件設(shè)備問(wèn)題。U-Boot命令行也是可以實(shí)現(xiàn)自動(dòng)補(bǔ)全功能。

1.uboot命令格式分析

??uboot命令存放在uboot目錄下的common目錄下。
??do_help命令功能實(shí)現(xiàn)如下:

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為命令參數(shù)傳遞:

help 命令標(biāo)志符;
CONFIG_SYS_MAXARGS命令傳遞的最大參數(shù)個(gè)數(shù);
1 命令重復(fù)執(zhí)行次數(shù);

do_help命令實(shí)現(xiàn)函數(shù);

“alias for ‘help’”命令用法說(shuō)明;
最后一個(gè)參數(shù)為命令用法詳細(xì)說(shuō)明;
int do_help(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])函數(shù)參數(shù)說(shuō)明:
cmd_tbl_t * cmdtp結(jié)構(gòu)體指針。

struct cmd_tbl_s {
	char		*name;		/* 命令名字*/
	int		maxargs;	/*命令傳遞的最大參數(shù)個(gè)數(shù)*/
	int		repeatable;	/*命令重復(fù)執(zhí)行次數(shù)*/
	/*命令功能實(shí)現(xiàn)函數(shù)*/
	int		(*cmd)(struct cmd_tbl_s *, int, int, char * const []);
	char		*usage;		/*命令基本用法說(shuō)明*/
#ifdef	CONFIG_SYS_LONGHELP
	char		*help;		/*命令詳細(xì)用法說(shuō)明*/
#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 命令傳入的參數(shù)個(gè)數(shù),和main函數(shù)argc相同;
??argv 存放命令參數(shù)內(nèi)容,和main函數(shù)argv相同;

2.tiny4412下編寫(xiě)uboot命令控制蜂鳴器

2.1 tiny4412開(kāi)發(fā)板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命令模板實(shí)現(xiàn)beep命令

#include 
#include 

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

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

U_BOOT_CMD(
	beep,	CONFIG_SYS_MAXARGS,	1,	do_beep,
	"beep ",
	"\n"
	"beep用法\n"
	"開(kāi)蜂鳴器:beep on\n"
	"關(guā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頂層目錄下執(zhí)行make,重新編譯uboot

[wbyq@wbyq uboot_tiny4412-sdk1506]$ make

??4.燒寫(xiě)uboot

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

??beep命令編寫(xiě)成功。

pYYBAGMkcm-ASnF_AADRQDhKR-0795.png#pic_center

??5. beep命令運(yùn)行測(cè)試

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

Usage:
beep 
beep用法
開(kāi)蜂鳴器:beep on
關(guān)蜂鳴器:beep_off
TINY4412 # beep on
TINY4412 # beep off

3.分析uboot保存環(huán)境變量位置

??在Linux操作系統(tǒng)啟動(dòng)前,uboot需要完成系統(tǒng)環(huán)境變量配置。在uboot目錄下有tiny4412.h中保存的系統(tǒng)的默認(rèn)環(huán)境變量參數(shù)。

poYBAGMkcm-AMDrDAAFgzLO4XXs676.png#pic_center

?1.當(dāng)我們修改了系統(tǒng)環(huán)境變量,執(zhí)行了saveenv命令后,則環(huán)境變量將寫(xiě)入到磁盤(pán)中,接下來(lái)我們將分析一下uboot源碼中環(huán)境變量寫(xiě)入磁盤(pán)的扇區(qū)位置。
在uboot命令中,并沒(méi)有直接腳cmd_save.c的函數(shù),因此,我們可以根據(jù)saveenv命令執(zhí)行后的提示信息來(lái)分析。在uboot命令行下執(zhí)行saveenv命令時(shí),會(huì)看到有輸出提示信息,這樣我們可以直接在uboot工程中搜索一下輸出信息的位置。

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

??2.接下來(lái)跳入saveenv函數(shù),查看一下該函數(shù)執(zhí)行過(guò)程。

poYBAGMkcnGAfeBFAAFJvadUxmc007.png#pic_center

??當(dāng)我們跳到定義處時(shí)會(huì)看到有多重位置,要想準(zhǔn)確跳轉(zhuǎn)到正確位置,我們可以再查找參考saveenv命令的后半段提示信息賦值位置。

pYYBAGMkcnKAW0_TAADLA9vI1v8189.png#pic_centerpoYBAGMkcnKAOqhnAABkB5T6EHE816.png#pic_center

?3.經(jīng)過(guò)查找參考我們發(fā)現(xiàn),后半段提示信息的定義位置是在env_auto.c中,而我們saveenv函數(shù)右鍵跳到定義處時(shí)在env_auto.c中也有定義,說(shuō)明我們要跳轉(zhuǎn)的文件即為env_atuo.c文件。

在 saveenv函數(shù)中,并沒(méi)有看到有關(guān)于mmc寫(xiě)扇區(qū)的函數(shù),說(shuō)明我們還需要進(jìn)一步跳轉(zhuǎn)到對(duì)應(yīng)的子函數(shù)中去分析。

pYYBAGMkcnOAHNmGAAHFZGjF75w395.png#pic_center

??4.我們可以再次根據(jù)saveenv命令的打印提示,在最后還會(huì)打印“done”這個(gè)信息,這樣我們就可以更新這個(gè)信息,對(duì)當(dāng)前函數(shù)中的三個(gè)子函數(shù)進(jìn)行分析,看下哪一個(gè)子函數(shù)中有這個(gè)字符串的打印。經(jīng)過(guò)查看代碼可知最終調(diào)用的函數(shù)即為saveenv_movinand()函數(shù)。

poYBAGMkcnOAPXwxAAFdmqd4NEs124.png#pic_center

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

pYYBAGMkcnSAR9fCAAFTGQPcPVU089.png#pic_center

??6.在這個(gè)函數(shù)中即為實(shí)現(xiàn)環(huán)境變量寫(xiě)入作用,再次跳到movi_write()函數(shù)中查看一下這個(gè)函數(shù)參數(shù)作用。

poYBAGMkcnWAfeGJAACy5x8ktDY303.png

??可以看到,movi_write()函數(shù)參數(shù)作用分別為:mmc設(shè)備編號(hào)、寫(xiě)入mmc的起始扇區(qū)、寫(xiě)入的扇區(qū)個(gè)數(shù)、寫(xiě)入的環(huán)境變量?jī)?nèi)容。
??我們可以在這個(gè)函數(shù)中加入printf函數(shù)打印一下寫(xiě)入的扇區(qū)地址和扇區(qū)數(shù)量。然后再重新編譯uboot,燒寫(xiě)到SD卡中再次啟動(dòng)查看效果。

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11681

    瀏覽量

    218581
  • Uboot
    +關(guān)注

    關(guān)注

    4

    文章

    131

    瀏覽量

    29864
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    電能質(zhì)量監(jiān)測(cè)裝置可自定義監(jiān)測(cè)時(shí)段嗎?

    電能質(zhì)量監(jiān)測(cè)裝置普遍支持自定義監(jiān)測(cè)時(shí)段,現(xiàn)代中高端裝置還具備分時(shí)差異化監(jiān)測(cè)與靈活觸發(fā)能力,可按時(shí)間、事件或混合策略定制采集與存儲(chǔ),兼顧精度、效率與存儲(chǔ)成本。 一、自定義監(jiān)測(cè)時(shí)段的核心實(shí)現(xiàn)方式 1.
    的頭像 發(fā)表于 12-10 16:49 ?1018次閱讀

    電能質(zhì)量在線(xiàn)監(jiān)測(cè)裝置的自定義監(jiān)測(cè)時(shí)段功能有哪些應(yīng)用場(chǎng)景?

    電能質(zhì)量在線(xiàn)監(jiān)測(cè)裝置的 自定義監(jiān)測(cè)時(shí)段功能 ,核心價(jià)值是通過(guò) “按需配置監(jiān)測(cè)時(shí)間、采樣頻率和數(shù)據(jù)策略”,實(shí)現(xiàn)精準(zhǔn)監(jiān)測(cè)、資源優(yōu)化與數(shù)據(jù)針對(duì)性分析,其應(yīng)用場(chǎng)景覆蓋工業(yè)生產(chǎn)、商業(yè)運(yùn)營(yíng)、電網(wǎng)運(yùn)維、特殊保障等
    的頭像 發(fā)表于 12-10 14:01 ?326次閱讀
    電能質(zhì)量在線(xiàn)監(jiān)測(cè)裝置的<b class='flag-5'>自定義</b>監(jiān)測(cè)時(shí)段功能有哪些應(yīng)用場(chǎng)景?

    電能質(zhì)量在線(xiàn)監(jiān)測(cè)裝置可自定義監(jiān)測(cè)時(shí)段嗎?

    電能質(zhì)量在線(xiàn)監(jiān)測(cè)裝置 完全支持自定義監(jiān)測(cè)時(shí)段 ,并提供 精細(xì)化、差異化 的配置能力。核心通過(guò) 嵌入式任務(wù)調(diào)度系統(tǒng) 結(jié)合 本地 / 遠(yuǎn)程參數(shù)配置 實(shí)現(xiàn),可靈活設(shè)定監(jiān)測(cè)開(kāi)始 / 結(jié)束時(shí)間、采樣頻率、數(shù)據(jù)
    的頭像 發(fā)表于 12-10 13:58 ?279次閱讀
    電能質(zhì)量在線(xiàn)監(jiān)測(cè)裝置可<b class='flag-5'>自定義</b>監(jiān)測(cè)時(shí)段嗎?

    無(wú)圖形界面模式下自定義檢查工具的應(yīng)用

    此前文章已介紹 ANSA 中的自定義檢查工具。本文將探討該功能在無(wú)圖形界面(No-GUI)模式下的應(yīng)用,旨在滿(mǎn)足標(biāo)準(zhǔn)化工作流程的需求,適用于需要高度自動(dòng)化的前處理場(chǎng)景。通過(guò)集成自定義檢查,用戶(hù)可實(shí)現(xiàn)工作流程的高效自動(dòng)化運(yùn)行。
    的頭像 發(fā)表于 11-30 14:13 ?461次閱讀
    無(wú)圖形界面模式下<b class='flag-5'>自定義</b>檢查工具的應(yīng)用

    采用匯編指示符來(lái)使用自定義指令

    * 使用riscv-nuclei-elf-objdump -d a.out &gt; main.dump命令查看反匯編代碼,結(jié)果如下所示 如圖所示,在指定位置插入了自定義的指令數(shù)據(jù)。 2
    發(fā)表于 10-28 06:02

    如何使用SDK進(jìn)行自定義音頻播放功能

    在上一篇文章安信可離線(xiàn)語(yǔ)音模組 VC-01、VC-02 系列教程 【二次開(kāi)發(fā)篇】自定義音頻替換失敗過(guò)程中,簡(jiǎn)要概述了res_build_tool.py 文件, 其主要的作用就是將音頻文件進(jìn)行轉(zhuǎn)換,從而使編譯固件的時(shí)候能夠?qū)⒁纛l文件編譯到BIN中,然后在各項(xiàng)事件觸發(fā)的時(shí)候?qū)崿F(xiàn)播放。
    的頭像 發(fā)表于 09-25 15:52 ?3151次閱讀
    如何使用SDK進(jìn)行<b class='flag-5'>自定義</b>音頻播放功能

    LOTO示波器自定義解碼功能—CANFD解碼

    LOTO示波器軟件更新了自定義解碼功能,并在bilibili上傳了演示視頻,視頻鏈接: https://www.bilibili.com/video/BV1wq3ezjEjQ
    的頭像 發(fā)表于 07-11 10:34 ?895次閱讀
    LOTO示波器<b class='flag-5'>自定義</b>解碼功能—CANFD解碼

    大彩講堂:VisualTFT軟件如何自定義圓形進(jìn)度條

    VisualTFT軟件如何自定義圓形進(jìn)度條
    的頭像 發(fā)表于 07-07 17:10 ?1360次閱讀
    大彩講堂:VisualTFT軟件如何<b class='flag-5'>自定義</b>圓形進(jìn)度條

    KiCad 中的自定義規(guī)則(KiCon 演講)

    “ ?Seth Hillbrand 在 KiCon US 2025 上為大家介紹了 KiCad 的規(guī)則系統(tǒng),并詳細(xì)講解了自定義規(guī)則的設(shè)計(jì)與實(shí)例。? ” ? 演講主要圍繞 加強(qiáng) KiCad 中的自定義
    的頭像 發(fā)表于 06-16 11:17 ?1769次閱讀
    KiCad 中的<b class='flag-5'>自定義</b>規(guī)則(KiCon 演講)

    HarmonyOS應(yīng)用自定義鍵盤(pán)解決方案

    自定義鍵盤(pán)是一種替換系統(tǒng)默認(rèn)鍵盤(pán)的解決方案,可實(shí)現(xiàn)鍵盤(pán)個(gè)性化交互。允許用戶(hù)結(jié)合業(yè)務(wù)需求與操作習(xí)慣,對(duì)按鍵布局進(jìn)行可視化重構(gòu)、設(shè)置多功能組合鍵位,使輸入更加便捷和舒適。在安全防護(hù)層面,自定義鍵盤(pán)可以
    的頭像 發(fā)表于 06-05 14:19 ?2146次閱讀

    如何使用自定義設(shè)置回調(diào)函數(shù)?

    你好,我正在嘗試編寫(xiě)自己的自定義設(shè)置回調(diào)函數(shù),并使用 fastEnum=false。 是否有任何代碼示例或資料可供我參考? void CyU3PUsbRegisterSetupCallback
    發(fā)表于 05-21 06:11

    LabVIEW運(yùn)動(dòng)控制(三):EtherCAT運(yùn)動(dòng)控制器的高效加工指令自定義封裝

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

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

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

    如何添加自定義單板

    在開(kāi)發(fā)過(guò)程中,用戶(hù)有時(shí)需要?jiǎng)?chuàng)建自定義板配置。本節(jié)將通過(guò)一個(gè)實(shí)例講解用戶(hù)如何創(chuàng)建屬于自己的machine,下面以g2l-test.conf為例進(jìn)行說(shuō)明。
    的頭像 發(fā)表于 03-12 14:43 ?1252次閱讀

    如何快速創(chuàng)建用戶(hù)自定義Board和App工程

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