国产精品久久久久影院,成人午夜福利视频,国产精品久久久久高潮,国产精品 欧美 亚洲 制服,国产精品白浆无码流出

U-Boot bootargs簡析

發(fā)布者:心滿意足最新更新時(shí)間:2025-01-24 來源: cnblogs關(guān)鍵字:U-Boot 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

  Linux內(nèi)核啟動(dòng)時(shí)需要一些配置信息,如根文件系統(tǒng)的類型、flash分區(qū)情況、串口終端的編號、內(nèi)存的使用情況等等,而由于U-Boot和Linux Kernel的鏡像是獨(dú)立的兩個(gè)文件,所以只能兩者約定好在內(nèi)存的什么地方存放啟動(dòng)參數(shù),這樣U-Boot在啟動(dòng)引導(dǎo)時(shí)就將啟動(dòng)參數(shù)放置在相應(yīng)的地址處,而Linux Kernel則去相應(yīng)的地址讀取,然后加以處理。


  對于Tiny210開發(fā)板,啟動(dòng)參數(shù)放置在DDR2 SDRAM起始地址后的0x100偏移處,U-Boot中board/samsung/goni/goni.c中有如下代碼


 1 int board_init(void)

 2 {

 3     /* Set Initial global variables */

 4     s5pc110_gpio = (struct s5pc110_gpio *)S5PC110_GPIO_BASE;

 5 

 6     gd->bd->bi_arch_number = MACH_TYPE_GONI;

 7     gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;

 8 

 9     return 0;

10 }


  PHYS_SDRAM_1在include/configs/s5p_goni.h中就被定義為DDR2 SDRAM的起始地址。


  而在內(nèi)核中,arch/arm/mach-s5pv210/mach-mini210.c中也有相關(guān)的定義,兩者的地址是一樣的。


  那么參數(shù)應(yīng)該如何在內(nèi)存中組織呢?對于內(nèi)核來說,它應(yīng)該知道參數(shù)是從哪開始,從哪結(jié)束,這一點(diǎn)的解決方法是,第一個(gè)參數(shù)和最后一個(gè)參數(shù)都約定好形式,下面有說明。


  先看幾個(gè)用到的數(shù)據(jù)結(jié)構(gòu)。


 1 struct tag_header {

 2     u32 size;

 3     u32 tag;

 4 };

 5 

 6 struct tag {

 7     struct tag_header hdr;

 8     union {

 9         struct tag_core        core;

10         struct tag_mem32    mem;

11         struct tag_videotext    videotext;

12         struct tag_ramdisk    ramdisk;

13         struct tag_initrd    initrd;

14         struct tag_serialnr    serialnr;

15         struct tag_revision    revision;

16         struct tag_videolfb    videolfb;

17         struct tag_cmdline    cmdline;

18 

19         /*

20          * Acorn specific

21          */

22         struct tag_acorn    acorn;

23 

24         /*

25          * DC21285 specific

26          */

27         struct tag_memclk    memclk;

28     } u;

29 };

30 

31 struct tag *params;


  在啟動(dòng)內(nèi)核的函數(shù)中,全局變量被初始化為:


  params = ( struct tag *)bd->bi_boot_params;


  對U-Boot來說,只要牽住params這個(gè)變量,不斷向后面寫參數(shù)就行了,下面簡單分析幾個(gè)參數(shù)的填寫過程。


  第一個(gè)參數(shù)必須是TAG_CORE

  

1 設(shè)置ATAG_CORE的偽代碼

2 params->hdr.tag = ATAG_CORE;

3 params->hdr.size = ( sizeof ( struct tag_header ) + sizeof( struct tag_core ) ) >> 2;

4 params->u.core.flags = 0;

5 params->u.core.pagesize = 0;

6 params->u.core.rootdev = 0;

7 params = params + params->hdr.size;


  重要的參數(shù)CMDLING_TAG


1 設(shè)置ATAG_CMDLINE的偽代碼

2 params->hdr.tag = ATAG_CMDLINE;

3 params->hdr.size = ( sizeof( struct tag_header ) + sizeof( struct tag_cmdline ) ) >> 2;

4 p = getenv( 'bootargs' );

5 check_bootargs_not_null( p ) && bootargs_valid( p );

6 strcpy( params->u.cmdline.cmdline, p );

7 params = params + params->hdr.size;


  重要參數(shù)CONFIG_SETUP_MEMORY_TAGS


1 for( i = 0; i < CONFIG_NR_DRAM_BANKS; i++ )    //tiny210中此宏為1

2 {

3     params->hdr.tag = ATAG.MEM;

4     params->hdr.size = ( sizeof( struct tag_header ) + sizeof( struct tag_mem32 ) ) >> 2;

5     params->u.mem.start = bd->bi_dram.start;

6     params->u.mem.size = bd->bi_dram.size;

7     params = params + params->hdr.size;

8     

9 }


  可選參數(shù)CONFIG_REVISION_TAG


1 params->hdr.tag = ATAG_REVISION;

2 params->hdr.size = ( sizeof( struct tag_header ) + sizeof( struct tag_revision ) ) >> 2;

3 revision = board_get_revision();

4 params->u.revision.rev = revision;

5 params = params + params->hdr.size;

  可選參數(shù)SERIAL_TAG


1 params->hdr.tag = ATAG_SERIAL;

2 params->hdr.size = ( sizeof( struct tag_header ) + sizeof( struct tag_serial ) ) >> 2;

3 serialnr = board_get_serialnr(); 

4 params->u.serialnr.low = serialnr.low;

5 params->u.serialnr.high = serialnr.high

6 params = params + params->hdr.size;

  INITRD_TAG,所謂initrd 就是init ramdisk


 1 if( images->rd_start && images->rd_end )

 2 {

 3     setup_initrd_tag( gd->bd, images->rd_start, images->rd_end );

 4     雖然s5p_goni.h中使用了宏定義,但是沒有使用。

 5     params->hdr.tag = ATAG_INITRD2; ATAG_INITRD是壓縮的ramdisk image所在    的虛擬地址,ATAG_INITRD2是相應(yīng)的物理地址。

 6     params->hdr.size = ( sizeof( struct tag_header ) + sizeof( struct tag_initrd ) ) >> 2;

 7     params->u.initrd.start = initrd_start;

 8     params->u.initrd.size = initrd_end - initrd_start;

 9     params += params->hdr.size;    

10 }


對應(yīng)于開始的ATAG_CORE,最后一個(gè)也需要固定格式的tag:


1 params->hdr.tag = ATAG_NONE;

2 params->hdr.size = 0;


關(guān)鍵字:U-Boot 引用地址:U-Boot bootargs簡析

上一篇:U-Boot Makefile分析(5)主控Makefile分析
下一篇:Linux-3.0.8中基于S5PV210的IRQ模塊代碼追蹤和分析

推薦閱讀最新更新時(shí)間:2025-06-30 16:21

第九章、Tiny4412 U-BOOT移植九 DDR工作時(shí)序與原理 一
DDR SDRAM 全稱為 Double Data Rate SDRAM,中文名為“雙倍數(shù)據(jù)流 SDRAM”。DDR SDRAM 在原有的 SDRAM的基礎(chǔ)上改進(jìn)而來。下圖9-1是DDR和SDRAM的數(shù)據(jù)傳輸對比圖。 圖9-1、DDR和SDRAM的數(shù)據(jù)傳輸對比圖 上圖8-1可以清楚的看到,DDR可在一個(gè)時(shí)鐘周期內(nèi)傳送兩次數(shù)據(jù),上升沿傳一次,下降沿傳一次。 一、DDR的基本原理 圖9-2、DDR讀操作時(shí)序圖 從中可以發(fā)現(xiàn)它多了兩個(gè)信號:CLK#與DQS,CLK#與正常 CLK 時(shí)鐘相位相反,形成差分時(shí)鐘信號。而數(shù)據(jù)的傳輸在 CLK 與 CLK#的交叉點(diǎn)進(jìn)行,可見在 CLK 的上升與下降沿(此時(shí)正好是 CLK#的上
[單片機(jī)]
第九章、Tiny4412 <font color='red'>U-BOOT</font>移植九 DDR工作時(shí)序與原理 一
S3C6410移植u-boot(一)
步驟1 1、首先下載u-boot( ftp://ftp.denx.de/pub/u-boot ) wget ftp://ftp.denx.de/pub/u-boot/u-boot-latest.tar.bz2 2、解壓到你指定下路徑中 tar -jxvf u-boot-latest.tar.bz2 -C /opt 步驟2 1、進(jìn)入u-boot- 發(fā)布日期 文件夾 cd /opt/u-boot-2011.06/ cd board/samsung/ 2、建立smdk6410文件夾 mkdir smdk6410 3、復(fù)制6400文件夾下的所有代碼到6410下 cp -rf smdk6400/* smdk6410 4、進(jìn)入
[單片機(jī)]
06-S3C2440學(xué)習(xí)之移植2012u-boot到S3C2440(移植過程五--最終)
注意: 內(nèi)核啟動(dòng)前,uboot可以做一些硬件初始化的工作,如初始化串口。 同時(shí)uboot支持不同的機(jī)器ID,uboot啟動(dòng)時(shí)要注意設(shè)備ID 是多少,不同的設(shè)備ID,內(nèi)核會進(jìn)行不同的初始化操作,所以要確定好uboot的設(shè)備ID 以及內(nèi)核支持的設(shè)備ID。 一、環(huán)境參數(shù)設(shè)置 (1)Uboot可以配置一些環(huán)境變量, Uboot執(zhí)行的時(shí)候: 1讀參數(shù) 2判斷是否有效 3無效則用默認(rèn)寫死的值 (2)搜索下using default environment 查看默認(rèn)的配置default_environment: Nand存儲規(guī)劃 因此在Smdk2440.h (includeconfigs) 中加入一些環(huán)境變量的
[單片機(jī)]
06-S3C2440學(xué)習(xí)之移植2012u-boot到S3C2440(移植過程五--最終)
基于AT91RM9200的嵌入式ARM開發(fā)平臺的實(shí)現(xiàn)
  嵌入式系統(tǒng)是以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟硬件可以裁剪來適應(yīng)系統(tǒng)對功能、可靠性、成本、體積、功耗要求嚴(yán)格的專用計(jì)算機(jī)體系。隨著各種微處理器功能的完善以及軟件上操作系統(tǒng)的支持,使得嵌入式系統(tǒng)有了完整的體系架構(gòu)。   在專用的嵌入式板上運(yùn)行操作系統(tǒng)需要利用Bootloader來引導(dǎo)加載內(nèi)核和系統(tǒng)程序。Bootloader主要實(shí)現(xiàn)初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而把嵌入式硬件和嵌入式操作系統(tǒng)很好地銜接起來。   U-Boot是當(dāng)前比較流行、功能強(qiáng)大、比較有代表性的Bootloader,支持的處理器包括PowerARM(ARM7,ARM9,Srongarm,Xscale)、MIPS、X86、Motorola等系列
[嵌入式]
小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved