|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
uClinux 2.6 porting s3c44B0 |
| 作者:jxyhome 欄目:ARM技術(shù) |
uClinux 2.6 porting S3C44B0.html">S3C44B0 based on uClinux-armsys-050101.tar.gz 荊瀟影 2006.9.28 (E-mail:huazjxy@126.com) 目錄: 1.檢查linux 各編譯工具版本 2.立宇泰2.4內(nèi)核編譯 3.2.6.9內(nèi)核及補(bǔ)丁下載 4.2.6.9內(nèi)核編譯過程 5.結(jié)語 開發(fā)板:FSIIsc344b0 board ,CPU:SC344B0 RAM:8M FALSH:2M 不帶網(wǎng)卡 1. 檢查linux 各編譯工具版本 以root登陸linux,打開終端,使用命令gcc –v 檢查下gcc的版本及是否存在.,如果不存在(我裝的Redhat 9.0就遇到了這樣的情況),則需要重新安裝gcc.對(duì)于新手而言,去下個(gè)gcc版本再重新安裝,并不簡(jiǎn)單,至少我這樣的菜鳥就不會(huì).(linux 才剛剛接觸).網(wǎng)上搜索了下搜到篇好文章: http://bbs.chinaunix.net/viewthread.php?tid=596499 上面提到了一種方法: (2)更好的方法就是在X-window下選“主菜單”──>;“系統(tǒng)設(shè)置”──>;“添加/刪除應(yīng)用程序”──>;“開發(fā)工具”中的gcc并安裝它. 安裝過程中毫無懸念,電腦會(huì)自動(dòng)提醒你插入相應(yīng)的安裝盤. 2.立宇泰2.4內(nèi)核編譯 準(zhǔn)備好uClinux-armsys-050101.tar.gz和arm-elf-tools-20030314.sh 將uClinux-armsys-050101.tar.gz解壓縮, 運(yùn)行解壓命令: #tar xvzf uClinux-armsys-050101.tar.gz 解壓結(jié)束將會(huì)在/root下生成uClinux-dist目錄. 2.1.安裝編譯環(huán)境 下面開始配置編譯環(huán)境,將arm-elf-tools-20030314.sh拷貝到/root下,運(yùn)行安裝: #sh arm-elf-tools-20030314.sh 2.2.配置和裁剪uClinux #cd uClinux-dist #make menuconfig 此時(shí)將出現(xiàn)圖象界面,可以對(duì)其相應(yīng)的配置和裁減.進(jìn)入uClinux配置(uClinux v3.1.0 Configuration),選中”Kernel/Libarary /Defaults Selection->”.其中有兩個(gè)選項(xiàng)要選取:內(nèi)核設(shè)置和用戶選項(xiàng)設(shè)置: [*]Customize Kernel Settings [*]Customize Vendor/User Settings 選中這兩項(xiàng),按下ESC鍵退出,在詢問是否保存時(shí),選擇yes并回車. 終端將進(jìn)入內(nèi)核配置選單.我們?cè)谂渲胾Clinux可以根據(jù)自己的需要,對(duì)相應(yīng)的選項(xiàng)進(jìn)行自由選擇. 2.3.編譯uClinux 按下面步驟對(duì)uClinux源碼包進(jìn)行編譯: make dep ……………………建立依賴關(guān)系 make clean……………………清除舊的編譯結(jié)果 make lib_ONLY………………編譯庫 make user_ONLY………………編譯用戶程序 make romfs……………………產(chǎn)生romfs make image……………………產(chǎn)生映象文件 make………………………………編譯內(nèi)核 注意事項(xiàng):在上面六個(gè)步驟的編譯中,不建議在 make dep后就直接make了,一般建議一步步來,make clean下可以避免網(wǎng)上有些朋友出現(xiàn)的死機(jī)現(xiàn)象。 在make image的過程中會(huì)出現(xiàn)兩個(gè)錯(cuò)誤,這個(gè)兩個(gè)錯(cuò)誤大概是交叉編譯工具的某個(gè)庫被復(fù)制時(shí)出的錯(cuò)誤,沒有什么大的影響,不用去管。繼續(xù)下一步make編譯內(nèi)核。 這樣就在uClinux-dist 目錄下將生成三個(gè)文件:image.ram、image.rom和romfs.img就是我們用來下載和燒錄的映象文件。下載燒錄這些映象文件,啟動(dòng)和運(yùn)行uClinux就OK了。因?yàn)閘inux環(huán)境下對(duì)中文支持很差,只能夠換到windows環(huán)境下寫這篇東西,不能夠?qū)⒁恍┫鄳?yīng)指令的運(yùn)行情況給Copy下來,請(qǐng)見諒。但我這樣記憶書寫的,基本沒有問題。 3.2.6.9內(nèi)核及補(bǔ)丁下載 因?yàn)?.4內(nèi)核的編譯,因?yàn)榱⒂钐┑膗Clinux-armsys-050101.tar.gz補(bǔ)丁做的很好,基本不會(huì)出現(xiàn)問題,對(duì)于新學(xué)者來說,起個(gè)了解整個(gè)過程的作用這將是無比重要的。接著我們來探討下2.6內(nèi)核的移植問題。 S3C44B0 CPU 2.6內(nèi)核的官方網(wǎng)站是http://opensrc.sec.samsung.com/, 看了網(wǎng)站的資料后,我們首先要做的就是下載最新的內(nèi)核來試試看.其中下面的文章值得一讀. http://opensrc.sec.samsung.com/document/Getting_Familiar_with_uClinuxARM2_6.html 最新內(nèi)核編譯 http://opensrc.sec.samsung.com /下載補(bǔ)丁linux-2.6.11.8-hsc0.PATCH.gz www.kernel.org 下載linux-2.6.11.8.tar.gz. [root@jingxiaoying]# tar zxvf linux-2.6.11.8.tar.gz [root@jingxiaoying ]# cd linux-2.6.11.8 [root@jingxiaoyinglinux-2.6.11.8]# PATCH -p1 < ../linux-2.6.11.8-hsc0.PATCH [root@jingxiaoyinglinux-2.6.11.8]# ARCH=arm CROSS_COMPILE=arm-elf- make menuconfig [root@jingxiaoyinglinux-2.6.11.8]# ARCH=arm CROSS_COMPILE=arm-elf- make CC arch/arm/kernel/asm-offsets.s In file included from arch/arm/kernel/asm-offsets.c:13: include/linux/sched.h: In function `arch_pick_mmap_layout': include/linux/sched.h:1174: `TASK_UNMAPPED_BASE' undeclared (first use in this function) include/linux/sched.h:1174: (Each undeclared identifier is reported ONLY once include/linux/sched.h:1174: for each function it appears in.) make[1]: *** [arch/arm/kernel/asm-offsets.s] Error 1 make: *** [arch/arm/kernel/asm-offsets.s] Error 2 include/asm/arch/memory.h中增加TASK_UNMAPPED_BASE定義 [root@jingxiaoyinglinux-2.6.11.8]# ARCH=arm CROSS_COMPILE=arm-elf- make usr/initramfs_data.S: Assembler messages: usr/initramfs_data.S:29: Error: UNKNOWN pseudo-op: `.incbin' make[1]: *** [usr/initramfs_data.o] Error 1 make: *** [usr] Error 2 這個(gè)編譯器不支持.incbin的緣故, 下載新的編譯器 我現(xiàn)在使用的是arm-elf-tools-20030314.sh.下載新的編譯器: http://opensrc.sec.samsung.com/download/arm-elf-tools-20040427.sh 并安裝后,重新編譯: [root@jingxiaoyinglinux-2.6.11.8]# ARCH=arm CROSS_COMPILE=arm-elf- make arch/arm/mach-s3c44b0x/time.c: In function `s3c44b0x_time_init': arch/arm/mach-s3c44b0x/time.c:95: `gettimeoffset' undeclared (first use in this function) arch/arm/mach-s3c44b0x/time.c:95: (Each undeclared identifier is reported ONLY once arch/arm/mach-s3c44b0x/time.c:95: for each function it appears in.) arch/arm/mach-s3c44b0x/time.c:99: warning: implicit declaration of function `s3c44b0x_clear_pb' arch/arm/mach-s3c44b0x/time.c:100: warning: implicit declaration of function `s3c44b0x_unmask_irq' make[1]: *** [arch/arm/mach-s3c44b0x/time.o] Error 1 make: *** [arch/arm/mach-s3c44b0x] Error 2 [root@jingxiaoyinglinux-2.6.11.8]# 現(xiàn)在注釋掉gettimeoffset = s3c44b0x_gettimeoffset后,編譯: [root@jingxiaoyinglinux-2.6.11.8]# ARCH=arm CROSS_COMPILE=arm-elf- make CC arch/arm/mach-s3c44b0x/driver/rtl8019.o arch/arm/mach-s3c44b0x/driver/rtl8019.c: In function `nic_8019_open': arch/arm/mach-s3c44b0x/driver/rtl8019.c:218: `MOD_INC_USE_COUNT' undeclared (first use in this function) arch/arm/mach-s3c44b0x/driver/rtl8019.c:218: (Each undeclared identifier is reported ONLY once arch/arm/mach-s3c44b0x/driver/rtl8019.c:218: for each function it appears in.) arch/arm/mach-s3c44b0x/driver/rtl8019.c:216: warning: unused variable `j' arch/arm/mach-s3c44b0x/driver/rtl8019.c: In function `nic_8019_stop': arch/arm/mach-s3c44b0x/driver/rtl8019.c:286: `MOD_DEC_USE_COUNT' undeclared (first use in this function) arch/arm/mach-s3c44b0x/driver/rtl8019.c: In function `nic_8019_start_xmit': arch/arm/mach-s3c44b0x/driver/rtl8019.c:296: warning: unused variable `priv' make[2]: *** [arch/arm/mach-s3c44b0x/driver/rtl8019.o] Error 1 make[1]: *** [arch/arm/mach-s3c44b0x/driver] Error 2 make: *** [arch/arm/mach-s3c44b0x] Error 2 [root@jingxiaoyinglinux-2.6.11.8]# 注釋掉MOD_DEC_USE_COUNT和MOD_INC_USE_COUNT GEN .version CHK include/linux/compile.h UPD include/linux/compile.h CC init/version.o LD init/built-in.o LD .tmp_vmlinux1 arch/arm/mach-s3c44b0x/built-in.o(.text+0x170): In function `v3_dma_clean_range': : multiple definition of `v3_flush_user_cache_range' arch/arm/mm/built-in.o(.text+0x1480): first defined here arch/arm/mach-s3c44b0x/built-in.o(.text+0x170): In function `v3_dma_clean_range': : multiple definition of `v3_flush_user_cache_all' arch/arm/mm/built-in.o(.text+0x1480): first defined here arch/arm/mach-s3c44b0x/built-in.o(.text+0x170): In function `v3_dma_clean_range': : multiple definition of `v3_coherent_kern_range' arch/arm/mm/built-in.o(.text+0x148c): first defined here arch/arm/mach-s3c44b0x/built-in.o(.init.data+0x0): multiple definition of `v3_cache_fns' arch/arm/mm/built-in.o(.init.data+0x70): first defined here /usr/local/bin/arm-elf-ld.real: Warning: size of symbol `v3_cache_fns' changed from 36 in arch/arm/mm/built-in.o to 32 in arch/arm/mach-s3c44b0x/built-in.o arch/arm/mach-s3c44b0x/built-in.o(.text+0x170): In function `v3_dma_clean_range': : multiple definition of `v3_dma_flush_range' arch/arm/mm/built-in.o(. |
| 2樓: | >>參與討論 |
| 作者: jxyhome 于 2006/9/29 11:45:00 發(fā)布:
yumen 沒有人理,自己頂下:( |
|
| 3樓: | >>參與討論 |
| 作者: mxh0506 于 2006/9/29 12:21:00 發(fā)布:
不錯(cuò),我頂 |
|
| 4樓: | >>參與討論 |
| 作者: jxyhome 于 2006/9/29 17:03:00 發(fā)布:
謝謝 謝謝看來自己在論壇還努力不夠哦:) |
|
|
|
| 免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |