译自: http://linuxdevices.com/articles/AT4017834659.html点此查看原文

问题

当 Linux 内核启动系统时,它必须找到并执行第一个用户程序,通常是 init。用户程序存在于文件系统,故 Linux 内核必须找到并挂载上第一个(根)文件系统,方能成功开机。

丘猴子 發表在 痞客邦 留言(0) 人氣()

x-load本质是一个U-BOOT的精简版。为什么需要x-load这个玩意呢,而不是直接用u-boot呢?那是因为U-boot太大了,塞不进内部的RAM?那为啥要把X-LOAD塞进内部的RAM,而不是load到外部的RAM呢?

问题就在这里了。当OMAP3530上电的时候,memory controller还没有初始化,怎么去读写外部的RAM呢?必须要有人能先初始化memory controller啊。任务就交给x-Load了。它必须负责初始化外部的RAM控制器,把u-boot从NAND或者MMC中读出到外部RAM,然后 跳到u-boot的入口处执行。

丘猴子 發表在 痞客邦 留言(0) 人氣()

大多数bootloader都分为stage1stage2两部分,u-boot也不例外。依赖于CPU体系结构的代码(如设备初始化代码等)通常都放在stage1且可以用汇编语言来实现,而stage2则通常用C语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移植性。
1Stage1 start.S代码结构 
u-bootstage1代码通常放在start.S文件中,他用汇编语言写成,其主要代码部分如下:
1)定义入口。由于一个可执行的Image必须有一个入口点,并且只能有一个全局入口,通常这个入口放在ROMFlash)的0x0地址,因此,必须通知编译器以使其知道这个入口,该工作可通过修改连接器脚本来完成。
2)设置异常向量(Exception Vector)。
3)设置CPU的速度、时钟频率及终端控制寄存器。
4)初始化内存控制器。
5)将ROM中的程序复制到RAM中。
6)初始化堆栈。
7)转到RAM中执行,该工作可使用指令ldr pc来完成。
2Stage2 C语言代码部分
lib_arm/board.c中的start arm bootC语言开始的函数也是整个启动代码中C语言的主函数,同时还是整个u-bootarmboot)的主函数,该函数只要完成如下操作:
1)调用一系列的初始化函数。
2)初始化Flash设备。
3)初始化系统内存分配函数。
4)如果目标系统拥有NAND设备,则初始化NAND设备。
5)如果目标系统有显示设备,则初始化该类设备。
6)初始化相关网络设备,填写IPMAC地址等。
7)进去命令循环(即整个boot的工作循环),接受用户从串口输入的命令,然后进行相应的工作。
3U-Boot的启动顺序(示例,其他u-boot版本类似)
cpu/arm920t/start.S

 

丘猴子 發表在 痞客邦 留言(0) 人氣()


丘猴子 發表在 痞客邦 留言(0) 人氣()

           S3C44B0X的启动代码分析(bootloader)

(转)

丘猴子 發表在 痞客邦 留言(0) 人氣()

1. 引言

在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行。一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次:

丘猴子 發表在 痞客邦 留言(0) 人氣()

在linux kernel 2.6.x提供了sysfs,經由這樣的file-system可以告訴user-space系統有哪些裝置,而user-space的程式就可以動態的在/dev底下產生相對應的device node。

丘猴子 發表在 痞客邦 留言(0) 人氣()

在ubuntu 9.04上面有一個名為invest的pannel tool,這是一個投資理財的小工具,這個小工具利用抓取http://finance.yahoo.com/的資料,幫您做即時的股票和匯率等等的報導,所有在finance.yahoo.com上面查的到的資訊都可以利用這個工具來顯示。

丘猴子 發表在 痞客邦 留言(0) 人氣()

說到MTD您就不得不親自拜訪一下MTD的官網(http://www.linux-mtd.infradead.org/),傳統上UNIX將device分成兩大類,char device和block device,char device就像鍵盤,可以讀資料,但卻不能做seek,也沒有固定大小,而block就像硬碟一樣,可以隨機存取某個位置(seek)。而MTD並不是char device也不是block device,因此建立了新的device類別,稱為MTD。
MTD subsystem提供一個抽象層(FTL)來存取flash device(如NAN、OneNAND、NOR等等),而我們一般用的USB flash因為有IC控制,以Linux的角度看起來就像block device,而不是一個原生的(raw) flash。

丘猴子 發表在 痞客邦 留言(0) 人氣()

有時候我們需要寫一些"小的驅動程式",而早期的UNIX/Linux需要註冊major/minor number,即便可能只需要1個minor number,往往卻佔住major number底下的所有minor number,於是在Linux 2.0有了miscellaneous character drivers的誕生,misc driver使用major number 10,然後使用者如果需要這樣的"小驅動程式",便可以指明minor number即可。

丘猴子 發表在 痞客邦 留言(0) 人氣()