亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        嵌入式Linux在SH4架構(gòu)下的移植技術(shù)研究

        2008-04-12 00:00:00關(guān)勝曉刁智華
        現(xiàn)代電子技術(shù) 2008年24期

        摘 要:SuperH系列微處理器是Renesas公司(原Hitachi)開發(fā)的采用了RISC系統(tǒng)指令集的32位系列微處理器。詳細介紹SH4系列交叉編譯平臺在新版本編譯器下的配置過程,提出一種適用于SuperH系列微處理器的通用的內(nèi)核移植的方法并研究Linux 2.6內(nèi)核在SH4系列微處理器SH7751上的移植方案。實驗證明該方法可行,移植過程也對其他平臺有借鑒作用。

        關(guān)鍵詞:SuperH;Linux2.6;嵌入式系統(tǒng);內(nèi)核移植

        中圖分類號:TN21;TP311文獻標識碼:A

        文章編號:1004-373X(2008)24-058-03

        Research of Porting Embedded Linux Based on SH4

        WANG Ruo,GUAN Shengxiao,DIAO Zhihua

        (USTC-Renesas Joint Library,University of Science and Technology of China,Hefei,230026,China)

        Abstract: SuperH is a series of 32bit RISC MPU production of Renesas Company.The paper provides a method of porting embedded Linux kernel 2.6 to SH7751 and introduces the way of establishing crosstool in SH4 series MPU.The result proves it viable and helpful to other architecture of MPUs.And the migration process is also helpful to the other platform.The paper presents a common core transplant method applicable to series of SuperH microprocessor.

        Keywords:SuperH;Linux2.6;embedded system;core transplant

        1 引 言

        Renesas公司的SuperH系列微處理器是由原Hitachi公司設計開發(fā),由SuperH公司提供CPU技術(shù)支持。SH7751屬于微處理器SH4系列,有著較高的工作頻率和處理性能(430 MIPS/ 240 MHz)。Linux 2.6內(nèi)核相對于先前版本的內(nèi)核在可配置性方面有了較大的改進,內(nèi)核的可搶占和響應時間的改進使其在應用軟件性能上更加優(yōu)異。由于支持高檔的電源管理APM,就為各種手持設備和對電源管理比較嚴格的嵌入式系統(tǒng)提供了良好的平臺支持,越來越多的嵌入式系統(tǒng)陸續(xù)將Linux2.6作為開發(fā)的基礎(chǔ)平臺。因此將新內(nèi)核移植并建立開發(fā)環(huán)境成為進行嵌入式系統(tǒng)開發(fā)首先要進行的工作。一般對內(nèi)核移植的具體工作可以分為3個步驟:建立交叉編譯工具鏈(Toolchain);內(nèi)核的配置和剪裁;建立根文件系統(tǒng)并配置bootloader。

        SH系列微處理器進行嵌入式Linux移植也是按照上述3個步驟進行,但在新版本編譯器環(huán)境下移植Linux2.6過程與先前版本的配置有較大差。

        2 交叉編譯環(huán)境的建立

        2.1 交叉編譯源文件和工具的選取

        交叉編譯是指在宿主機器(Host)上生成針對特定平臺代碼(Target)的過程。實驗中使用的是x86平臺下的debian4.0的宿主機對SH4系列平臺代碼進行交叉編譯,從而生成在SH4系列MPU上可運行的代碼。進行交叉編譯的一系列工具即稱為交叉編譯工具鏈。

        交叉編譯工具主要由binutils,gcc 和 glibc組成。由于SH4系列微處理器應用較少,一些著名的交叉編譯工具如CLFS,crosstool均未提供對SH4系列環(huán)境的支持。有較多的SH系列微處理器開發(fā)板廠商提供了對Linux的開發(fā)工具包,但提供的大都是2.4版本的內(nèi)核,并且無法及時得到社區(qū)的技術(shù)支持。實驗中使用Renesas公司的EDOSK7751R開發(fā)平臺,移植中選取負責SH架構(gòu)Linux內(nèi)核團隊2007年5月發(fā)布的內(nèi)核穩(wěn)定版本linux-sh-2.6.20。

        在選取C庫過程中由于穩(wěn)定性考慮選取標準庫glibc,glibc-sh中INSTALL文件指明了binutils和gcc的最低版本和推薦版本,實驗中選取的binutils版本為2.17。

        與內(nèi)核的選取不同,gcc的選取并不建議選用最新的版本,這是因為可能在選用的其他工具軟件進行具體調(diào)試中很多陳舊代碼可能在新編譯器下編譯鏈接錯誤較難解決。在實驗中選擇的是gcc4.1.1及gcc的Sh4補丁。實驗中使用的源文件和補丁如下:

        binutils-2.17.50.tar.gz

        binutils-2.17.50-sh4-linux.tar.gz

        gcc4.1.1.tar.gz

        gcc4.1.1-sh4-linux.tar.gz

        glibc-2.5.3.tar.gz

        glibc-2.5.3-sh4-linux.tar.gz

        glibc-linuxthreads-2.5.3.tar.gz

        glibc-headers-2.5.3.tar.gz

        glibc-headers-2.5-3.sh4.tar.gz

        linux-sh-2.6.20.10.tar.gz

        2.2 內(nèi)核頭文件的生成。

        首先建立工作目錄和一些環(huán)境外部變量:

        $export PREFIX=/home/ruo

        $export PATH=${PREFIX}/usr/bin:${PATH}

        內(nèi)核頭文件是交叉編譯的基礎(chǔ)文件,在較早版本的Linux(如2.4)中交叉編譯中一般通過對內(nèi)核的配置生成。在Linux2.6環(huán)境下配置完內(nèi)核后,版本頭文件version.h要單獨建立,否則后期glibc無法安裝。解壓linux-sh-2.6.20.10.tar.gz并運行指令:

        $tar –xzf linux-sh-2.6.20.10.tar.gz

        $cd linux-2.6.20

        $make ARCH=sh CROSS_COMPILE=sh4-linux- menuconfig

        $make include/linux/version.h

        $install -dv ${PREFIX}/usr/include/{asm,asm-generic,linux,rdma,mtd,sound,video}

        配置“Processor selection”選擇“support SH7751 processor”,另外根據(jù)SH7751系列不同型號CPU的用戶手冊配置其他內(nèi)核選項。配置完成保存退出后,建立版本頭文件。運行后可查看/include/linux/文件夾中是否生成autoconf.h和version.h是否生成而判定內(nèi)核頭文件是否創(chuàng)建成功。

        將生成的頭文件中asm,asm-generic,linux,rdma,mtd, sound,video七個目錄拷貝到工作目錄${PREFIX}/usr/include中。

        2.3 建立引導編譯器(bootstrap gcc)

        binutils是一組二進制工具集合,將binutils-2.17和補丁解壓后,打完全部補丁,然后即可安裝生成交叉編譯的二進制工具集合。將libiberty.h文件拷入內(nèi)核頭文件庫中,編譯后期gcc使用。命令參數(shù)如下:

        $cd binutils-2.17-sh4-linux

        $patch -p1 < ../binutils-2.17-sh4-linux.patch

        $patch ....(省略)

        $cd ..

        $../binutils-2.17/configure --prefix=${PREFIX}/tools --target=sh4-linux

        --disable-nls --enable-shared --disable-multilib

        $make

        $make install

        $cp -v include/libiberty.h ${PREFIX}/usr/include

        與先前版本不同,gcc3.2后版本安裝引導編譯器必須要獲得glibc的支持。而glibc庫又依靠gcc交叉編譯。為解決這個問題,glibc提供了頭文件供gcc初始編譯器使用。在編譯引導編譯器前,首先要安裝glibc-headers。注意此過程并非交叉編譯glibc,因為沒有g(shù)cc引導編譯器是無法進行的。與binutils設置不同,安裝中參數(shù)“--host”必須設定為目標平臺架構(gòu)“sh4-linux”,這樣才能告訴gcc編譯出符合目標系統(tǒng)的信息。在對glibc-headers解壓和補丁處理后,安裝并在工作目錄中建立假文件stubs.h??截恜threadtypes.h文件到內(nèi)核頭文件中提供本地POSIX線程庫支持,以便后期編譯glibc。命令參數(shù)如下:

        $CC=gcc ../glibc-2.4/configure --prefix=${PREFIX}/tools

        --host=sh4-linux --with-headers=${PREFIX}/usr/include

        $make install-headers

        $install -dv ${PREFIX}/usr/include/bits

        $touch ${PREFIX}/usr/include/gnu/stubs.h

        $cp -v nptl/sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h

        ${PREFIX}/usr/include/bits

        當glibc頭文件安裝完畢,即可安裝引導交叉編譯器。引導編譯器僅是一個C語言的編譯器,作用是對glibc進行交叉編譯,然后使用編譯后的glibc生成完整的支持C++的gcc完整交叉編譯器(full gcc)。解壓并打好補丁后修改對可能使用的某些共享庫的搜索目錄,以便在后期建立完整交叉工具鏈能直接找到共享庫。在/gcc/config/sh/linux.h文件第46行后添加:

        #undef LIB_SPEC

        #define LIB_SPEC

        “%{!static:

        %{!m4:-rpath-link /usr/sh4-linux/lib}

        %{m4:-rpath-link /usr/sh4-linux/lib/m4}}”

        然后進行配置安裝:

        $../gcc-4.1.1/configure --prefix=${PREFIX}/tools

        --target= sh4-linux --build= i686-linux

        --disable-multilib --disable-nls --disable-shared

        --enable-languages=c

        $make all-gcc

        $make install-gcc

        2.4 建立完整的交叉編譯工具鏈(full gcc)

        在bootstrap gcc的安裝完成后,就可以完整地交叉編譯glibc了。解壓glibc-2.53和glibc-linuxthreads-2.5.3(提供基于POSIX標準的核心線程庫)及補丁文件,即可配置安裝,“--enable-kernel=2.6.0”表示kernel選用2.6.x,并不需要指明詳細版本。配置參數(shù)如下:

        $CC=sh4-linux-gcc AR=sh4-linux-ar

        ../glibc-2.5.3/configure --prefix=/home/ruo/tools

        --libexecdir=/usr/lib/glibc

        --host=sh4-linux --disable-profile --enable-add-ons

        --with-tls --enable-kernel=2.6.0 --with-__thread

        --with-binutils=${PREFIX}/tools/bin

        --with-headers=${PREFIX}/usr/include

        完成對gcc的安裝,配置參數(shù)如下:

        $../gcc-4.1.1/configure --prefix=${PREFIX}/tools

        --target=sh4-linux --build= i686-linux

        --disable-multilib --disable-nls --enable-shared

        --enable-languages=c,c++ --enable-__cxa_atexit

        --enable-c99 --enable-long-long --enable-threads=posix

        完成后工作目錄下/tools/bin下會生成以一系列“sh4-linux-”為前綴的交叉編譯二進制工具。這樣交叉編譯工具鏈即建立完成。

        3 內(nèi)核的配置和剪裁

        與前期建立交叉編譯內(nèi)核頭文件不同,對內(nèi)核的配置由于完整的Linux內(nèi)核對于嵌入式系統(tǒng)來說過于龐大,需經(jīng)過剪裁非必要的部分達到減小內(nèi)核鏡像的目的。運行指令:

        make ARCH=sh CROSS_COMPILE=sh4-linux- menuconfig

        再次進入menuconfig界面,主要配置板級支持,對塊設備RAMdisk、設備驅(qū)動及文件系統(tǒng)的支持??蓪⑴c內(nèi)核其他部分關(guān)系較遠且不經(jīng)常使用的功能代碼編譯成為可加載模塊,以有效地減小內(nèi)核的大小,還可減小內(nèi)核消耗的內(nèi)存。當配置完成后即可編譯內(nèi)核生成內(nèi)核映像。內(nèi)核映像可以選擇壓縮或者非壓縮格式,在實際嵌入式系統(tǒng)中一般選擇壓縮內(nèi)核,這樣能夠有效地減小內(nèi)核占用體積,編譯壓縮內(nèi)核映像:

        make ARCH=sh CROSS_COMPILE=sh4-linux- zImage

        4 根文件系統(tǒng)的建立與配置bootloader

        4.1 根文件系統(tǒng)的建立

        Linux在啟動期間需要安裝根文件系統(tǒng),根文件系統(tǒng)也是所有Unix系統(tǒng)所必須的組件。其中常用必需的目錄有:/bin,/dev,/etc,/lib等。bin目錄下放置必要的用戶命令(二進制文件),dev目錄下放置了設備文件,etc目錄下是系統(tǒng)配置文件和啟動文件,lib目錄下放置系統(tǒng)運行庫的文件等。嵌入式Linux一般通過內(nèi)存來虛擬設備文件,將根文件系統(tǒng)的壓縮鏡像解壓到其中并掛載而創(chuàng)建。建立創(chuàng)建一個名為initrd臨時用于掛載根文件系統(tǒng)的設備點,掛載并建立/bin,/dev,/etc等文件夾:

        # mkdir -p /mnt/initrd

        # dd if=/dev/zero of=/initrd bs=1k count=6144

        # mke2fs -F -m 0 initrd

        # mount -o loop /initrd /mnt/initrd

        # mkdir dev proc etc etc/rc.d sbin bin lib usr

        將配置文件及庫文件拷貝到相關(guān)目錄。對于用戶命令的二進制文件可以使用BusyBox來創(chuàng)建。BusyBox 包含了近百種 Linux 上標準的工具程序,僅需要幾百kb空間,在嵌入式系統(tǒng)上非常適合使用以減少根目錄文件大小??梢栽趕h-linux.org下載到busybox-1.2.0-3.sh4.tar.gz,注意在交叉編譯BusyBox時需要glibc的支持,需要將其所需要的庫文件鏈接到其lib目錄中。

        另外內(nèi)核應該對根文件系統(tǒng)的大小進行配置,在選項“Block Devices”中 “Default RAM disk size”進行大小設置,以便在后期啟動時能夠指示根文件系統(tǒng)目錄的大小。實驗中生成的內(nèi)核大致在 6 MB左右,所以在先前創(chuàng)建initrd時參數(shù)“bs=1k count=6144”指明文件每塊大小1 kB,共6 144塊。

        在根文件系統(tǒng)創(chuàng)建并配置完成后,即可壓縮鏡像文件了??捎胓zip壓縮鏡像:

        # gzip -c -9 initrd.img > initrd.bin

        4.2 bootloader的配置

        bootloader是在操作系統(tǒng)內(nèi)核運行之前的一段程序,通過這段程序初始化硬件設備,建立內(nèi)存空間的映射表,從而建立適當?shù)南到y(tǒng)軟硬件環(huán)境,為調(diào)用操作系統(tǒng)內(nèi)核做好準備。由于bootloader是基于特定硬件平臺的,所以不同架構(gòu)有著不同的bootloader。SH系列微處理器的標準專用bootloader是Renesas公司的sh-boot,EDOSK7751R開發(fā)板中提供了工具包。

        SH4系列微處理器加電復位后從A000 0000處取得第一條指令。修改sh-boot中/FLASH/FLASHboot.c文件以確定FLASH和RAM的位置和大小,以映射到相映的位置。修改/machine/syshsh4.mem文件確定啟動鏡像文件的大小,設置堆棧指針。/config/config.h文件設置CONFIG_BOOT_LOADER1 用來啟動方式(從FLASH啟動或網(wǎng)絡啟動)。如果設置從FLASH啟動,需修改Makefile文件中的LINUX_ROM_ADDRESS和INITRD_ROM_ADDRESS確定Linux壓縮內(nèi)核和根文件系統(tǒng)鏡像在FLASH中的位置,其他啟動方式如tftp等設置可參閱Renesas提供的sh-boot技術(shù)文檔。設置完畢后make,即可得到bootloader的啟動鏡像。

        5 結(jié) 語

        本文針對國內(nèi)應用較少的SuperH平臺,介紹嵌入式Linux2.6在7751上的移植技術(shù)。重點針對SH4系列在較新版本編譯器和內(nèi)核環(huán)境下交叉編譯環(huán)境的建立和內(nèi)核的配置進行詳細闡述。實驗結(jié)果表明,在EDOSK7751R開發(fā)板上系統(tǒng)運行可靠,是SH4架構(gòu)移植的一般性方法,對以后開發(fā)SH系列微處理器嵌入式系統(tǒng)有著指導意義。

        參考文獻

        [1]Karim Yagbmour.構(gòu)建嵌入式Linux系統(tǒng)[M].北京:中國電力出版社,2004.

        [2]Anon SHLinux Quick Start Guide.Renesas Technology Europe Limited,2003.

        [3]Bill Gatliff.Running Linux on the Sega Dreamcast[EB/OL].http://www.linuxdevice.com,2005.

        [4]張曉林,崔迎煒.嵌入式系統(tǒng)設計與實踐[M].北京:北京航空航天大學出版社,2006.

        [5]袁太生,張素琴.嵌入式環(huán)境下Linux 移植問題的探討[J].計算機應用研究,2003(11):61-63.

        [6]張藝瀕,謝金晶.通用安全Linux操作系統(tǒng)設計分析.現(xiàn)代電子技術(shù),2007,30(6):102-104.

        作者簡介 王 若 男,1982年出生,碩士研究生。研究方向為模式識別與智能系統(tǒng)。

        關(guān)勝曉 男,1964年出生。副教授。研究方向為嵌入式系統(tǒng),智能機器人等。

        刁智華 男,1982年出生,博士研究生。研究方向為圖像處理、嵌入式系統(tǒng)。

        国产清品夜色一区二区三区不卡| 国产精品成人网站| 少妇做爰免费视频网站| aaa毛片视频免费观看| 亚洲二区三区在线播放| 亚洲毛片在线观看免费| 娇妻在交换中哭喊着高潮| 麻豆av传媒蜜桃天美传媒| 精品亚洲一区二区99| 91盗摄偷拍一区二区三区| 免费a级毛片18禁网站app| 五十路熟女一区二区三区| 日韩女优一区二区视频| 成人麻豆视频免费观看| 久久久精品一区aaa片| 亚洲色欲在线播放一区| 国产美女高潮流白浆免费观看| 亚洲不卡高清av网站| 精品无码久久久久久国产| 青青在线精品2022国产| 一级黄色一区二区三区视频| 亚洲国产高清精品在线| 少妇aaa级久久久无码精品片| 福利视频黄| 亚洲中文有码一区二区| 精品一区二区av天堂色偷偷| 欧美精品videossex少妇| 一本无码av一区二区三区| 亚洲人妻精品一区二区三区| 国产 高潮 抽搐 正在播放| www国产精品内射熟女| 亚洲AV无码成人精品区日韩密殿| 国产av丝袜熟女丰满一区二区| 国产永久免费高清在线| 日本午夜福利| 亚洲一区二区三区最新视频| 暖暖 免费 高清 日本 在线| 激情欧美日韩一区二区| 国产目拍亚洲精品区一区| 少妇人妻中文久久综合| 国产女主播喷水视频在线观看 |