欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

完善資料讓更多小伙伴認(rèn)識你,還能領(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)中的開源的Bootloader,作用是用來引導(dǎo)操作系統(tǒng),以及給開發(fā)人員提供測試調(diào)試工具。主要負(fù)責(zé)基本硬件初始化,導(dǎo)啟動(dòng)內(nèi)核啟動(dòng)。

U-Boot命令眾多,通過uboot命令可完成系統(tǒng)環(huán)境變量設(shè)置。U-Boot本質(zhì)就是一份裸機(jī)程序,這樣可以在U-Boot命令下調(diào)試一些硬件設(shè)備問題。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’”命令用法說明;
最后一個(gè)參數(shù)為命令用法詳細(xì)說明;
int do_help(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])函數(shù)參數(shù)說明:
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;		/*命令基本用法說明*/
#ifdef	CONFIG_SYS_LONGHELP
	char		*help;		/*命令詳細(xì)用法說明*/
#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下編寫uboot命令控制蜂鳴器

2.1 tiny4412開發(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)//開蜂鳴器
	{
		GPD0_DAT|=1<<0;//開蜂鳴器
	}
	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"
	"開蜂鳴器: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.燒寫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命令運(yùn)行測試

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

Usage:
beep 
beep用法
開蜂鳴器: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)境變量將寫入到磁盤中,接下來我們將分析一下uboot源碼中環(huán)境變量寫入磁盤的扇區(qū)位置。
在uboot命令中,并沒有直接腳cmd_save.c的函數(shù),因此,我們可以根據(jù)saveenv命令執(zhí)行后的提示信息來分析。在uboot命令行下執(zhí)行saveenv命令時(shí),會看到有輸出提示信息,這樣我們可以直接在uboot工程中搜索一下輸出信息的位置。

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

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

poYBAGMkcnGAfeBFAAFJvadUxmc007.png#pic_center

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

pYYBAGMkcnKAW0_TAADLA9vI1v8189.png#pic_centerpoYBAGMkcnKAOqhnAABkB5T6EHE816.png#pic_center

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

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

pYYBAGMkcnOAHNmGAAHFZGjF75w395.png#pic_center

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

poYBAGMkcnOAPXwxAAFdmqd4NEs124.png#pic_center

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

pYYBAGMkcnSAR9fCAAFTGQPcPVU089.png#pic_center

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

poYBAGMkcnWAfeGJAACy5x8ktDY303.png

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

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

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

    關(guān)注

    87

    文章

    11352

    瀏覽量

    210539
  • Uboot
    +關(guān)注

    關(guān)注

    4

    文章

    125

    瀏覽量

    28365
收藏 人收藏

    評論

    相關(guān)推薦

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

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

    Altium Designer 15.0自定義元件設(shè)計(jì)

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

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

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

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

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

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

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

    創(chuàng)建自定義的基于閃存的引導(dǎo)加載程序(BSL)

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

    EtherCAT運(yùn)動(dòng)控制器PT/PVT實(shí)現(xiàn)用戶自定義軌跡規(guī)劃

    EtherCAT運(yùn)動(dòng)控制器PT/PVT實(shí)現(xiàn)用戶自定義軌跡規(guī)劃。
    的頭像 發(fā)表于 08-15 11:49 ?729次閱讀
    EtherCAT運(yùn)動(dòng)控制器PT/PVT實(shí)現(xiàn)用戶<b class='flag-5'>自定義</b>軌跡規(guī)劃

    NVIDIA NeMo加速并簡化自定義模型開發(fā)

    如果企業(yè)希望充分發(fā)揮出 AI 的力量,就需要根據(jù)其行業(yè)需求量身定制的自定義模型。
    的頭像 發(fā)表于 07-26 11:17 ?830次閱讀
    NVIDIA NeMo加速并簡化<b class='flag-5'>自定義</b>模型開發(fā)

    HarmonyOS開發(fā)案例:【 自定義彈窗】

    基于ArkTS的聲明式開發(fā)范式實(shí)現(xiàn)了三種不同的彈窗,第一種直接使用公共組件,后兩種使用CustomDialogController實(shí)現(xiàn)自定義彈窗
    的頭像 發(fā)表于 05-16 18:18 ?1473次閱讀
    HarmonyOS開發(fā)案例:【 <b class='flag-5'>自定義</b>彈窗】

    AWTK 開源串口屏開發(fā)(18) - 用 C 語言自定義命令

    編寫代碼即可實(shí)現(xiàn)常見的應(yīng)用。但是,有時(shí)候我們需要自定義一些命令,以實(shí)現(xiàn)一些特殊的功能。本文檔介紹如何使用C語言自定義命令。1.實(shí)現(xiàn)hmi_model_cmd_t接口
    的頭像 發(fā)表于 05-11 08:24 ?491次閱讀
    AWTK 開源串口屏開發(fā)(18) - 用 C 語言<b class='flag-5'>自定義</b><b class='flag-5'>命令</b>

    TSMaster 自定義 LIN 調(diào)度表編程指導(dǎo)

    LIN(LocalInterconnectNetwork)協(xié)議調(diào)度表是用于LIN總線通信中的消息調(diào)度的一種機(jī)制,我們收到越來越多來自不同用戶希望能夠通過接口實(shí)現(xiàn)自定義LIN調(diào)度表的需求。所以在
    的頭像 發(fā)表于 05-11 08:21 ?772次閱讀
    TSMaster <b class='flag-5'>自定義</b> LIN 調(diào)度表編程指導(dǎo)

    HarmonyOS開發(fā)案例:【UIAbility和自定義組件生命周期】

    本文檔主要描述了應(yīng)用運(yùn)行過程中UIAbility和自定義組件的生命周期。對于UIAbility,描述了Create、Foreground、Background、Destroy四種生命周期。對于頁面
    的頭像 發(fā)表于 05-10 15:31 ?1356次閱讀
    HarmonyOS開發(fā)案例:【UIAbility和<b class='flag-5'>自定義</b>組件生命周期】

    HarmonyOS開發(fā)實(shí)例:【自定義Emitter】

    使用[Emitter]實(shí)現(xiàn)事件的訂閱和發(fā)布,使用[自定義彈窗]設(shè)置廣告信息。
    的頭像 發(fā)表于 04-14 11:37 ?1067次閱讀
    HarmonyOS開發(fā)實(shí)例:【<b class='flag-5'>自定義</b>Emitter】

    鴻蒙ArkUI實(shí)例:【自定義組件】

    組件是 OpenHarmony 頁面最小顯示單元,一個(gè)頁面可由多個(gè)組件組合而成,也可只由一個(gè)組件組合而成,這些組件可以是ArkUI開發(fā)框架自帶系統(tǒng)組件,比如?`Text`?、?`Button`?等,也可以是自定義組件,本節(jié)筆者簡單介紹一下自定義組件的語法規(guī)范。
    的頭像 發(fā)表于 04-08 10:17 ?717次閱讀

    RK3568驅(qū)動(dòng)指南|驅(qū)動(dòng)基礎(chǔ)進(jìn)階篇-進(jìn)階5 自定義實(shí)現(xiàn)insmod命令實(shí)驗(yàn)

    RK3568驅(qū)動(dòng)指南|驅(qū)動(dòng)基礎(chǔ)進(jìn)階篇-進(jìn)階5 自定義實(shí)現(xiàn)insmod命令實(shí)驗(yàn)
    的頭像 發(fā)表于 02-20 14:10 ?794次閱讀
    RK3568驅(qū)動(dòng)指南|驅(qū)動(dòng)基礎(chǔ)進(jìn)階篇-進(jìn)階5 <b class='flag-5'>自定義</b>實(shí)現(xiàn)insmod<b class='flag-5'>命令</b>實(shí)驗(yàn)