資料介紹
1 引言
uClinux作為Linux衍生操作系統,具有支持多任務、內核精簡、高效、穩定和源代碼開放等優點,專門應用于無MMU微處理器的嵌入式系統[1]。將uClinux應用于嵌入式系統已經成為許多嵌入式開發人員的選擇。本文針對基于三星公司生產的ARM系列微處理器S3C44B0的硬件平臺,詳細論述移植uClinux 的過程,主要包括BootLoader的設計, uClinux內核的修改,交叉編譯環境的建立,uClinux內核的配置,編譯及連接,映像文件的下載及運行。
2 硬件環境
硬件平臺以S3C44B0為核心,采用的外部晶振頻率為10MHz,內核主頻最高可達到64MHz;通過RS232接口與上位機通訊;外接JTAG接口,支持在線調試;采用SST39VF1601(2M字節)作為程序存儲器,對應的地址空間為0x00000000-0x001fffff;采用HY57VF641620 (8M 字節)作為數據存儲器, 對應的地址空間為0x0c000000-0x0c7fffff。硬件框圖如圖1所示。
圖 1 硬件框圖
3 uClinux的移植
3.1 移植思路
硬件環境確定以后,首先,要為uClinux設計一個BootLoader,通過BootLoader來初始化硬件,引導uClinux運行。Bootloader設計可以在ads中實現。然后,針對硬件環境,和設計的BootLoader修改uClinux內核。接下來,在Linux操作系統下建立編譯uClinux的交叉編譯環境。最后,配置、編譯、連接uClinux,下載編譯得到的映像文件到Flash,通過BootLoader來啟動uClinux。
3.2 Bootloader的設計
BootLoader就是在操作系統內核運行之前運行的一段小程序.通過這段小程序,我們可以初始化硬件設備、建立內存空間的映射圖,從而將系統的軟硬件環境帶到一個合適的狀態,以便為最終轉到操作系統內核準備好合適的環境.這里設計的BootLoader主要有啟動、下載和燒寫引導uClinux的功能。BootLoader完成初始化工作后會通過串口在Windows的終端顯示如下信息:0: tftp download 1: Write NorFlash with download file 2: Boot uClinux
在終端的提示符“/”下輸入0、1或2分別代表選擇功能0、功能1或 功能2。BootLoader執行對應的操作,功能0利用TFTP網絡傳輸程序到SDRAM,默認下載地址為0x0c000800;功能1下載程序到flash,uClinux的映像文件image.rom的下載地址為0x00010000, Romfs.img的下載地址為0x00100000。這兩個下載地址不是任意的,前一個地址與BootLoader的功能2有關;后一個地址與uClinux的文件系統定位有關。具體確定方法在下文論述;功能2啟動燒寫到Flash的uClinux。[2]
因為本文的重點是uClinux的移植,所以這里不再詳述BootLoader的具體實現過程,只介紹一下與uClinux相關的地方:(1)因為uClinux要利用S3C44B0的串口輸出一些信息,所以BootLoader初始化過程中要設定處理器的主頻,uClinux根據這個主頻來設定串口寄存器,得到一定數值的波特率。本文選擇的主頻為61Mhz,波特率為115200。(2)執行功能2時,會調用一個MoveRun函數:
Void MoveRun(void)
{void (*fp)(U32,U32)=(void(*)(U32,U32))0xc300000; //0xc300000為uClinux的運行地址
NorFlashRead(0xc300000,0x10000,0x160000) ; //將燒寫到0x10000處的image.rom移到//0xc300000
(*fp)(0, 0); //啟動uClinux
}
(3) 啟動uClinux后,image.rom在0xc300000處自解壓,并在0x0c000000處放置uClinux 的中斷向量表。即使uClinux 內核已經得到處理器的控制權運行,一旦發生中斷,處理器還是會自動跳轉到從0x0地址開始的第一級中斷向量表中的某個表項(依賴于中斷類型)處讀取指令運行。所以在編寫BootLoader時,地址0x0處的一級異常中斷矢量表只需簡單地包含向0x0c000000處的中斷向量表的跳轉指令就可以,這樣就 能夠正確地將發生的事件交給uClinux的中斷處理程序來處理,BootLoader的第一級異常中斷向量表如下所示:
b ResetHandler ;//跳轉到初始化部分
ldr pc,=0x0c000004; // Undefined Instruction Handler
ldr pc,=0x0c000008; // Software Interrupt Handler
ldr pc,=0x0c00000c; // Prefetch Abort Handler
ldr pc,=0x0c000010; // Data Abort Handler
b 。
ldr pc,=0x0c000018; //IRQ Handler
ldr pc,=0x0c00001c; //FIQ Handler
3.3 uClinux內核的修改
目前uClinux已被成功移植到S3C44B0及其他多款ARM芯片上,但由于嵌入式操作系統的運行是與嵌入式系統的硬件密切相關的,而硬件的設計則會因為使用場合的不同而千差萬別,因此,uClinux內核源代碼中和硬件緊密相關的部分就應該針對特定的硬件作出適當的修改。
首先,從網站(www.uClinx.org)下載源碼uClinux-dist-20040408,但這個發行包中的內核對S3C44B0X處理器的支持是不完整的,必須為內核打上補丁uClinux-2.4.24.patch(可以從http://www.hzlitai.com.cn下載),然后在終端下執行:patch –p0
-2.4.24.patch就可以安裝該補丁。該補丁完善了對S3C44B0的支持,但是它針對特定的硬件及Bootloader,對內核做了相應的修改,因此我們在做移植時應該根據自己的BootLoader及硬件來修改內核。修改部分如下:
(1)壓縮內核代碼起始地址修改
修改目錄linux-2.4.x/arch/armnommu/boot/下的文件Makefile里的如下代碼:
ifeq ($(CONFIG_BOARD_MBA44),y)
ZTEXTADDR = 0x0c300000
ZRELADDR = 0x0c008000
Endif
ZTEXTADDR代表 映像文件image.rom自解壓的起始地址,它的值是由BootLoader的功能2決定的。執行功能2,將image.rom從Flash轉移到SDRAM的地址0x0c300000,內核自解壓,所以ZTEXTADDR必須和這個值相同。ZRELADDR代表內核解壓后代碼輸出起始地址。
uClinux作為Linux衍生操作系統,具有支持多任務、內核精簡、高效、穩定和源代碼開放等優點,專門應用于無MMU微處理器的嵌入式系統[1]。將uClinux應用于嵌入式系統已經成為許多嵌入式開發人員的選擇。本文針對基于三星公司生產的ARM系列微處理器S3C44B0的硬件平臺,詳細論述移植uClinux 的過程,主要包括BootLoader的設計, uClinux內核的修改,交叉編譯環境的建立,uClinux內核的配置,編譯及連接,映像文件的下載及運行。
2 硬件環境
硬件平臺以S3C44B0為核心,采用的外部晶振頻率為10MHz,內核主頻最高可達到64MHz;通過RS232接口與上位機通訊;外接JTAG接口,支持在線調試;采用SST39VF1601(2M字節)作為程序存儲器,對應的地址空間為0x00000000-0x001fffff;采用HY57VF641620 (8M 字節)作為數據存儲器, 對應的地址空間為0x0c000000-0x0c7fffff。硬件框圖如圖1所示。
圖 1 硬件框圖
3 uClinux的移植
3.1 移植思路
硬件環境確定以后,首先,要為uClinux設計一個BootLoader,通過BootLoader來初始化硬件,引導uClinux運行。Bootloader設計可以在ads中實現。然后,針對硬件環境,和設計的BootLoader修改uClinux內核。接下來,在Linux操作系統下建立編譯uClinux的交叉編譯環境。最后,配置、編譯、連接uClinux,下載編譯得到的映像文件到Flash,通過BootLoader來啟動uClinux。
3.2 Bootloader的設計
BootLoader就是在操作系統內核運行之前運行的一段小程序.通過這段小程序,我們可以初始化硬件設備、建立內存空間的映射圖,從而將系統的軟硬件環境帶到一個合適的狀態,以便為最終轉到操作系統內核準備好合適的環境.這里設計的BootLoader主要有啟動、下載和燒寫引導uClinux的功能。BootLoader完成初始化工作后會通過串口在Windows的終端顯示如下信息:0: tftp download 1: Write NorFlash with download file 2: Boot uClinux
在終端的提示符“/”下輸入0、1或2分別代表選擇功能0、功能1或 功能2。BootLoader執行對應的操作,功能0利用TFTP網絡傳輸程序到SDRAM,默認下載地址為0x0c000800;功能1下載程序到flash,uClinux的映像文件image.rom的下載地址為0x00010000, Romfs.img的下載地址為0x00100000。這兩個下載地址不是任意的,前一個地址與BootLoader的功能2有關;后一個地址與uClinux的文件系統定位有關。具體確定方法在下文論述;功能2啟動燒寫到Flash的uClinux。[2]
因為本文的重點是uClinux的移植,所以這里不再詳述BootLoader的具體實現過程,只介紹一下與uClinux相關的地方:(1)因為uClinux要利用S3C44B0的串口輸出一些信息,所以BootLoader初始化過程中要設定處理器的主頻,uClinux根據這個主頻來設定串口寄存器,得到一定數值的波特率。本文選擇的主頻為61Mhz,波特率為115200。(2)執行功能2時,會調用一個MoveRun函數:
Void MoveRun(void)
{void (*fp)(U32,U32)=(void(*)(U32,U32))0xc300000; //0xc300000為uClinux的運行地址
NorFlashRead(0xc300000,0x10000,0x160000) ; //將燒寫到0x10000處的image.rom移到//0xc300000
(*fp)(0, 0); //啟動uClinux
}
(3) 啟動uClinux后,image.rom在0xc300000處自解壓,并在0x0c000000處放置uClinux 的中斷向量表。即使uClinux 內核已經得到處理器的控制權運行,一旦發生中斷,處理器還是會自動跳轉到從0x0地址開始的第一級中斷向量表中的某個表項(依賴于中斷類型)處讀取指令運行。所以在編寫BootLoader時,地址0x0處的一級異常中斷矢量表只需簡單地包含向0x0c000000處的中斷向量表的跳轉指令就可以,這樣就 能夠正確地將發生的事件交給uClinux的中斷處理程序來處理,BootLoader的第一級異常中斷向量表如下所示:
b ResetHandler ;//跳轉到初始化部分
ldr pc,=0x0c000004; // Undefined Instruction Handler
ldr pc,=0x0c000008; // Software Interrupt Handler
ldr pc,=0x0c00000c; // Prefetch Abort Handler
ldr pc,=0x0c000010; // Data Abort Handler
b 。
ldr pc,=0x0c000018; //IRQ Handler
ldr pc,=0x0c00001c; //FIQ Handler
3.3 uClinux內核的修改
目前uClinux已被成功移植到S3C44B0及其他多款ARM芯片上,但由于嵌入式操作系統的運行是與嵌入式系統的硬件密切相關的,而硬件的設計則會因為使用場合的不同而千差萬別,因此,uClinux內核源代碼中和硬件緊密相關的部分就應該針對特定的硬件作出適當的修改。
首先,從網站(www.uClinx.org)下載源碼uClinux-dist-20040408,但這個發行包中的內核對S3C44B0X處理器的支持是不完整的,必須為內核打上補丁uClinux-2.4.24.patch(可以從http://www.hzlitai.com.cn下載),然后在終端下執行:patch –p0
-2.4.24.patch就可以安裝該補丁。該補丁完善了對S3C44B0的支持,但是它針對特定的硬件及Bootloader,對內核做了相應的修改,因此我們在做移植時應該根據自己的BootLoader及硬件來修改內核。修改部分如下:
(1)壓縮內核代碼起始地址修改
修改目錄linux-2.4.x/arch/armnommu/boot/下的文件Makefile里的如下代碼:
ifeq ($(CONFIG_BOARD_MBA44),y)
ZTEXTADDR = 0x0c300000
ZRELADDR = 0x0c008000
Endif
ZTEXTADDR代表 映像文件image.rom自解壓的起始地址,它的值是由BootLoader的功能2決定的。執行功能2,將image.rom從Flash轉移到SDRAM的地址0x0c300000,內核自解壓,所以ZTEXTADDR必須和這個值相同。ZRELADDR代表內核解壓后代碼輸出起始地址。
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 嵌入式實時操作系統μC、OS-II在ARM上的移植.
- 嵌入式實時操作系統FreeRTOS在ARM7上移植實現
- 嵌入式操作系統FREERTOS的移植.
- 如何使用ARM進行嵌入式系統的設計與實現 14次下載
- 嵌入式操作系統uCLinux詳解 0次下載
- 基于ARM7與uClinux嵌入式智能終端系統_艾紅 0次下載
- PC機鍵盤防抖動技術在嵌入式系統中的移植 0次下載
- 嵌入式系統Bootloader開發移植
- 嵌入式Web服務器Boa的移植及其應用
- 基于uCLinux的嵌入式通訊的設計
- Java在基于WEB的嵌入式系統中的應用
- 嵌入式Linux2.6在S3C2410上的移植技術探析
- 嵌入式OS-uClinux軟件開發環境的建立及應用程序開發模
- 嵌入式Linux系統的移植研究
- 基于ARM的嵌入式uClinux系統設計與Web服務器應用的
- 嵌入式系統中的實時操作系統 517次閱讀
- 瑞薩CTSU程序在向嵌入式OS操作系統移植時的注意事項 372次閱讀
- 什么是嵌入式系統?嵌入式系統的具體應用 2563次閱讀
- 嵌入式系統的全面解析 3280次閱讀
- 如何實現嵌入式系統遠程調試 5401次閱讀
- 關于嵌入式系統以及其在印刷設備中的解決方案及應用淺析 690次閱讀
- 基于嵌入式Linux系統下Mini GUI的移植方法與過程詳解 3702次閱讀
- 基于嵌入式Linux系統的Bootloader模型在MIPS64上的移植設計淺析 942次閱讀
- 一種基于嵌入式系統應用的機器人視覺系統設計詳解 2602次閱讀
- 構建eCos嵌入式系統的步驟教程 3987次閱讀
- 嵌入式系統的特點大匯總 5896次閱讀
- 隨機存儲器在嵌入式操作系統中的應用設計詳解 1433次閱讀
- 基于STM32的嵌入式測控系統設計與實現 8642次閱讀
- uC/OS和uClinux操作系統的區別 4534次閱讀
- 嵌入式工業以太網的應用研究 1514次閱讀
下載排行
本周
- 1AN158 GD32VW553 Wi-Fi開發指南
- 1.51MB | 2次下載 | 免費
- 2嵌入式軟件開發符合ISO 26262 功能安全標準
- 1.61 MB | 1次下載 | 免費
- 3AN148 GD32VW553射頻硬件開發指南
- 2.07MB | 1次下載 | 免費
- 4PZT驅動開關電路
- 0.09 MB | 1次下載 | 免費
- 5模擬電路仿真實現
- 2.94MB | 1次下載 | 免費
- 6PCB繪制基礎知識
- 2.44MB | 1次下載 | 免費
- 7EE-38:ADSP-2181 IDMA端口-周期竊取時序
- 75.0KB | 次下載 | 免費
- 8EE-82:使用ADSP-2181 DSP的IO空間對另一個ADSP-2181進行IDMA引導
- 86.86KB | 次下載 | 免費
本月
- 1ADI高性能電源管理解決方案
- 2.43 MB | 452次下載 | 免費
- 2免費開源CC3D飛控資料(電路圖&PCB源文件、BOM、
- 5.67 MB | 139次下載 | 1 積分
- 3基于STM32單片機智能手環心率計步器體溫顯示設計
- 0.10 MB | 132次下載 | 免費
- 4美的電磁爐維修手冊大全
- 1.56 MB | 24次下載 | 5 積分
- 5如何正確測試電源的紋波
- 0.36 MB | 19次下載 | 免費
- 6感應筆電路圖
- 0.06 MB | 10次下載 | 免費
- 7LZC3106G高性能諧振控制器中文手冊
- 1.29 MB | 9次下載 | 1 積分
- 8萬用表UT58A原理圖
- 0.09 MB | 9次下載 | 5 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935121次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420062次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233088次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191367次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183335次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81581次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73810次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65988次下載 | 10 積分
評論
查看更多