2012-01-30

U-Boot 啟動流程與架構

u-boot系統啟動流程

大多數bootloader都分為stage1和stage2兩大部分,u-boot也不例外。依賴於CPU體系結構的代碼(如設備初始化代碼等) 通常都放在stage1,且可以用彙編語言來實現,而stage2則通常用C語言來實現,這樣可以實現複雜的功能,而且有更好的可讀性和移植性。


stage1 (start.s代碼結構)

u-boot的stage1代碼通常放在start.s文件中,它用彙編語言寫成,其主要代碼部分如下:(1) 定義入口由於一個可執行的Image必須有一個入口點,並且只能有一個全局入口,通常這個入口放在ROM(Flash) 的0x0地址,因此,必須通知編譯器以使其知道這個入口,該工作可通過修改連接器腳本來完成。(2) 設置異常向量(Exception Vector) 。(3) 設置CPU的速度、時鐘頻率及中斷控制寄存器。  (4) 初始化內存控制器  (5) 將ROM中的程序複製到RAM中。  (6) 初始化堆棧(7) 轉到RAM中執行,該工作可使用指令ldr pc來完成。 


stage2 C語言代碼部分

lib_arm/board.c中的start_armboot是C語言開始的函數,也是整個啟動代碼中C語言的主函數,同時還是整個u-boot(armboot) 的主函數,該函數主要完成如下操作:  (1) 調用一系列的初始化函數。  (2) 初始化Flash設備。  (3) 初始化系統內存分配函數。(4) 如果目標系統擁有NAND設備,則初始化NAND設備。(5) 如果目標系統有顯示設備,則初始化該類設備。(6) 初始化相關網絡設備,填寫IP、MAC地址等。(7) 進入命令循環(即整個boot的工作循環) ,接受用戶從串口輸入的命令,然後進行相應的工作。


目錄名稱說明
board包含所有已建立完成之開發板,與硬體相關之檔案,比如Makefile和u-boot.lds等都和具體開發板的硬體和地址分配有關。
common與系統架構無關的檔案,包含環境變數的設定與執行遠端控制台各種命令的處理等。
cpuCPU相關檔案,其中的子目錄都是以U-Boot所支援的CPU為名,比如有子目錄arm926ejs、mips、mpc8260和nios等,每個特定的子目錄中都包括cpu.c和interrupt.c,start.S。其中cpu.c初始化CPU、設置指令(Instruction) Cache和資料(Data) Cache等;interrupt.c設置系統的各種中斷和異常/特殊事件(Exception),比如快速中斷、開關中斷、時鐘中斷、軟體中斷、預取中止和未定義指令等;start.S是U-Boot啟動時執行的第一個檔案,它主要是設定系統堆疊(Stack)和工作方式,為進入C程式作好前置作業。
disk磁碟驅動與分區處理(partition handling)相關的程式碼。
doc相關說明文件。
drivers各種硬體設備驅動程式(Device Driver),比如各種網路卡、支援CFI的Flash、串列埠(Serial Port)和USB等。
dtt處理與溫度設備相關的控制。
examples一些應用範例,例如:hello_world.c、sched.c等。
fs與所支援檔案系統有關之原始程式,U-Boot現在支援cramfs、fat、fdos、jffs2和registerfs。
include檔頭定義檔(.h),還有對各種硬體平台支援的組合語言檔(.asm),定義系統的各種配置,包含軟體與硬體。
lib_xxx與各種不同架構相關的函式庫或程式碼。(lib_arm、lib_mips、lib_i386、lib_m68k等)。
lib_generic公用的程式庫(Library),例如:crc32.c(CRC Check)、zlib.c(壓縮)、string.c(字串處理)等。
net處理與網絡有關之相關程式,BOOTP協定(Protocol)、TFTP協定、RARP協定和NFS檔案統的實現。
post提供Power On Self Test功能。
rtcReal Time Clock驅動程式。
tools提供建立S-Record或U-Boot映像檔等工具程式。





2012-01-20

SVN Commit SOP

Commands:
  1. svn checkout(co)-> check out project files from SVN server
  2. svn export -> check out project files from SVN server with out SVN files
  3. svn add -> add a file into the commit-list
  4. svn del -> del a file into the commit-list
  5. svn commit -> commit current commit-list

Rules:
1. 若有新增任何檔案, 用svn add將該檔案加入list中.
2. 關於先前已加入list中的檔案, 做了改動並不需要再svn add一次, 系統會自動偵測.
3. 用svn del去刪除任何不再需要的檔案.
4. 執行svn commit後, svn add與del所做的變動才會commit到server上.
5. 重新check out一份新的檔案再commit, 為最保險且不容易失敗的作法.

Steps:
1. svn add <file> (此步驟非必要)
2. svn del <file> (此步驟非必要)
3. svn commit

P.S.
  1. After committing, please checkout again and check if the latest source code in server can competely be built without errors.
  2. DO NOT commit unnecessary files to the server, such as temp files, or the files produced in compiling process.

2012-01-13

su & sudo

su 和 sudo 的区别:
  1.共同点:都是root用户的权限;
  2.不同点:su仅仅取得root权限,工作环境不变,还是在切换之前用户的工作环境;sudo是完全取得root的权限和root的工作环境。