新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Linux內核在S3C2410上移植的研究

        Linux內核在S3C2410上移植的研究

        作者: 時間:2012-07-17 來源:網絡 收藏

        當上電或復位后,VIVI啟動,位于NANDFLASH中的前4 KB程序便從NANDFLASH中由自動拷貝到一個叫SteppingStone的4 KB的內部RAM中,該RAM之后被映射到地址0x00處。此時,也就是VIVI前4 KB代碼開始運行,進行第一階段的硬件初始化,主要工作為:關Watchdog Timer,關中斷,初始化PLL和時鐘主頻設定,初始化存儲器控制器。VIVI初始化的主要內容:
        VIVI初始化階段一(在/arch/s3C2410/head.s文件內):
        硬件初始化
        配置串口
        復制自身到SDRAM中(跳轉到C代碼入口函數)
        VIVI初始化階段二(在/init/main.c文件內):
        對硬件系統繼續初始化
        內存映射初始化、內存管理單元MMU初始化
        初始化堆
        初始化mtd設備
        初始化私有數據
        初始化內置命令
        啟動VIVI

        3
        3.1
        實驗系統運行的版本是針對2.4.18進行-2.4.18.-rm7-pxal版本。本實驗是把該移植好的,讓它如何在自己的硬件系統上正常的運轉起來。
        Linux內核主要由5個子系統組成:進程調度子系統、進程間通信子系統、內存管理子系統、虛擬文件系統子系統、網絡接口子系統。
        (1)設置目標平臺和指定交叉編譯器:在最上層的根目錄/Makefile文件中,首先要指定所移植的硬件平臺,以及所使用的交叉編譯器。改為如下:
        ARCH:=arm
        CROSS_COMPILE=/opt/host/armv41/bin/armv41-unknown-Linux-
        也就是說,所移植的硬件平臺是ARM,所使用的交叉編譯器是存放在目錄/opt/host/armv41/bin/下的armv41-unknown-Linux-xxx等工具。
        (2)arch/arm目錄下Makefile修改。系統的啟動代碼是通過這個文件產生的。在Linux-2.4.18內核中要添加如下代碼:
        ifeq(MYM(CONFIG_ARCH_),y)
        TEXTADDR =0 xC0008000
        MACHINE =s3c2410
        endif
        這里TEXTADDR確定內核開始運行的虛擬地址。
        (3)arch/arm目錄下config.in修改。配置文件config.in能夠配置運行“make menuconfig”命令時的菜單選項,由于2.4.18內核中沒有的相關信息,所以要在該文件中進行有效的配置。
        (4)arch/arm/boot目錄下Makefile修改。編譯出來的內核存放在該目錄下,這里指定內核解壓到實際硬件系統上的物理地址。要根據實際的硬件系統修改解壓后,內核開始運行實際的物理地址。
        (5)arch/arm/boot/compressed目錄下Makefile修改。該文件從vmLinux中創建一個壓縮的vmlinuz鏡像文件。該文件中用到的SYSTE M,ZTEXTADDR,ZBSSADDR和ZRELADDR是從arch/arm/boot/Makefile文件中得到的。添加如下代碼:
        ifeq(MYM(CONFIG_ARCH_S3C2410),y)
        OBJS+=head-s3c2410.o
        Endif
        (6)arch/arm/boot/compressed目錄下添加head-s3c2410.s。該文件主要用來初始化處理器。
        (7)arch/arm/def-configs目錄下添加配置好的S3C2410的配置文件。
        (8)arch/arm/kernel目錄下Makefile修改。該文件主要用來確定文件類型的依賴關系。
        (9)arch/arm/kernel目錄下的文件debug-armv.s修改。在該文件中添加如下代碼,目的是關閉外圍設備的時鐘,以保證系統正常運行。
        (10)arch/arm/kernel目錄下的文件entry-armv.s修改,CPU初始化時處理中斷的匯編代碼。
        (11)arch/arm/ram目錄下的相關文件。那里面則是移植好的有關arm的內存管理代碼。
        (12)arch/arm/mach-s3c2410目錄下的相關文件。
        那里面則是針對s3c2410這款處理器編寫的所需代碼。
        3.2 制作cramfs文件系統
        利用工具軟件MKCRAMFS制作cramfs文件系統,MKCRAMFS工具在/實驗軟件/tools/目錄下,該文件系統是一個只讀壓縮的文件系統,文件系統類型可以是ext2,ext3等。這里提供的一個系統目錄是root_tech,它里面包含將來要用到的所有文件,它在/實驗軟件/source_ code/的目錄內,為root.tar.bz2。把制作工具和root_tech放在同一個文件夾下并對root.tar.bz2進行解壓,在終端下切換到那個文件夾目錄下使用命令MKCRAMFS root_tech rootfs.cramfs,就可把root_tech制作成文件名為rootfs.cramfs的只讀的壓縮的cramfs文件系統了。系統啟動后,內核將把它加載到內存中,解壓。

        4 結語
        本文針對一個特定的目標平臺,提供了構建一個基本嵌入式Linux系統的過程與方法。對Linux 2.4內核版本進行裁減、移植,編譯生成的內核在S3C2410處理器的目標板上成功運行,且保留了Linux原有的工作穩定的特點。將Linux操作系統移植于嵌入式系統中作為嵌入式系統的底層研發平臺是一個復雜的問題,移植后系統的實時性、穩定性、安全性和精簡程度等方面問題還需要在以后的設計中進一步

        本文引用地址:http://www.104case.com/article/148756.htm

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 抚松县| 太白县| 偏关县| 满城县| 绥棱县| 浪卡子县| 望谟县| 大庆市| 六安市| 夹江县| 荣成市| 商水县| 孙吴县| 洞口县| 沛县| 岫岩| 弥勒县| 安达市| 罗城| 新丰县| 广平县| 湖南省| 上饶县| 清远市| 阿合奇县| 永兴县| 商洛市| 崇明县| 汉川市| 黄大仙区| 苏尼特右旗| 黎平县| 合水县| 屯门区| 日土县| 淅川县| 周口市| 朝阳市| 元朗区| 菏泽市| 上虞市|