在S3C4510B評估板上移植uclinux-20030305全過程
發(fā)布時(shí)間:2007/8/28 0:00:00 訪問次數(shù):639
作者 liber
來自: 北京
--------------------------------------------------------------------------------
跟蹤3天反匯編代碼,終于將uclinux-20030305在S3C4510B的板子上跑了起來,現(xiàn)將移植的全過程寫出來,與大家分享
一、下載所需工具、壓縮包
uClinux-dist-20030305.tar.gz(http://www.uclinux.org/)
arm-elf-tools-20030314.sh
二、要修改的文件列表:
1. ../linux-2.4.x/arch/armnommu/mach-snds100/arch.c
MACHINE_START(SAMSUNG, "SNDS100")-〉MACHINE_START(SNDS100, "SNDS100")
[說明]這個(gè)文件的錯(cuò)誤是舊版的遺跡,以前的版本對于4510b使用統(tǒng)一的標(biāo)識samsung但是由于最新版新加入了對samsung其他板子的支持,所以,修改了這一標(biāo)識,對于s3c4510b改用snds100,但是這一修改在這個(gè)版本中并沒有完全統(tǒng)一起來,這也是多處錯(cuò)誤的根本原因。
2. ../linux-2.4.x/arch/armnommu/config.in
在if [ "$CONFIG_BOARD_SNDS100" = "y" ]項(xiàng)中添加:
define_bool CONFIG_CPU_S3C4510 y
[說明]在這個(gè)配置文件中,CONFIG_BOARD_SNDS100一項(xiàng)居然少了cpu類型定義,對比其他項(xiàng)就會(huì)發(fā)現(xiàn)這一問題,該項(xiàng)在armnommu/kernel/head-armv.S中用到。
3. ../linux-2.4.x/arch/armnommu/mach-snds100/Makefile
O_TARGET := samsung.o ->O_TARGET := snds100.o
[說明]這個(gè)makefile的修改是為了和1保持一致,再make的過程中,使用snds100標(biāo)識鏈接文件。
4. ../linux-2.4.x/arch/armnommu/kernel/head-armv.S
#if defined(CONFIG_ARCH_SAMSUNG) && defined(CONFIG_CPU_ARM710) ->
#if defined(CONFIG_CPU_S3C3410) || defined(CONFIG_CPU_S3C4530)
[說明]這里也是由于samsung和snds100使用環(huán)亂造成的,如果不修改,之后的一段程序?qū)⒈活A(yù)編譯,會(huì)出現(xiàn)LC0重定義的錯(cuò)誤,因?yàn)榇饲暗膕nds100已經(jīng)聲明LC0,實(shí)際上之后的程序時(shí)不應(yīng)該被預(yù)編譯的,那些是3410和4530專用的。
5. /Makefile
TFTPDIR = /tftpboot后加上:
LINUXTARGET=bzImage
# normal make targets 中加入:
.PHONY: images
images:
$(MAKE) -C $(VENDDIR) images
all: subdirs romfs modules modules_install image linux 后加入 images
[說明]這里的修改,和6的第一條是為了生成壓縮的rom映像文件和ramf可執(zhí)行的bin文件。
6. /vendors/Samsung/4510B/Makefile
最后加入:
images:
arm-elf-objcopy -O binary -R .note -R .comment -S $(ROOTDIR)/$(LINUXDIR)/linux $(IMAGEDIR)/uclinux_ram.bin
cp $(ROOTDIR)/$(LINUXDIR)/arch/armnommu/boot/zImage $(IMAGEDIR)/uclinux_rom.bin
同時(shí)注釋掉:$(CROSS_COMPILE)objcopy …… 部分
在 genromfs -v -V "ROMdisk" -f $(ROMFSIMG) -d $(ROMFSDIR) 后加入(這里生成romfs.o):
arm-elf-ld -r -o $(ROOTDIR)/$(LINUXDIR)/romfs.o -b binary $(ROMFSIMG)
[說明]第一條是5的延續(xù),第二條是生成romfs.o文件,以備后用。
7. ../linux-2.4.x /arch/armnommu/boot/compressed/Makefile
找到$(LD) $(ZLDFLAGS) $(HEAD) $(OBJS) piggy.o -o $(LINUX) 改為:
$(LD) $(ZLDFLAGS) $(HEAD) $(OBJS) piggy.o $(LIBGCC) -o $(LINUX)
[說明]生成linux kernel,包含必要的庫支持,$(LIBGCC)來自于arm-elf-tools庫。
找到ZLDFLAGS = -p -X -T $(LINUX).lds改為:
ZLDFLAGS = -p -X -T vmlinux.lds
[說明]這各鏈接文件是為帶mmu的板子準(zhǔn)備的,生成帶自解壓的映像文件,由$(LINUX)控制,這里我們直接使用,也可以直接將這個(gè)鏈接文件改名為linux.lds.
8. ../linux-2.4.x /arch/armnommu/vmlinux-armv.lds.in
找到 *(.got) /* Global offset table */
在其后加入:
romfs_data = .;
romfs.o
romfs_data_end = .;
在這里注意格式,這三句話之前后縮進(jìn);
[說明]在這個(gè)連接文件中將romfs.o連接到.text section中。
9. ../linux-2.4.x/arch/armnommu/mm/proc-arm6,7.S
mov r0, #0
#ifdef CONFIG_CPU_WITH_CACHE 改為:
#ifdef CONFIG_CPU_WITH_CACHE
mov r0, #0
[說明]這里可能是careless的錯(cuò)誤,對比舊版就可以理解。
10. ../linux-2.4.x /drivers/block/blkmem.c
/*
* Please, configure the ROMFS for your system here
*/
/*S3C4510b */
#ifdef CONFIG_ARCH_SAMSUNG
extern char romfs_data[];
extern char romfs_data_end[];
#endif
找到:
arena[] = { 加入:
#ifdef CONFIG_ARCH_SAMSUNG
{0, romfs_data, -1},
#endif
[說明]這里象0927版一樣少了針對samsung 的ro
作者 liber
來自: 北京
--------------------------------------------------------------------------------
跟蹤3天反匯編代碼,終于將uclinux-20030305在S3C4510B的板子上跑了起來,現(xiàn)將移植的全過程寫出來,與大家分享
一、下載所需工具、壓縮包
uClinux-dist-20030305.tar.gz(http://www.uclinux.org/)
arm-elf-tools-20030314.sh
二、要修改的文件列表:
1. ../linux-2.4.x/arch/armnommu/mach-snds100/arch.c
MACHINE_START(SAMSUNG, "SNDS100")-〉MACHINE_START(SNDS100, "SNDS100")
[說明]這個(gè)文件的錯(cuò)誤是舊版的遺跡,以前的版本對于4510b使用統(tǒng)一的標(biāo)識samsung但是由于最新版新加入了對samsung其他板子的支持,所以,修改了這一標(biāo)識,對于s3c4510b改用snds100,但是這一修改在這個(gè)版本中并沒有完全統(tǒng)一起來,這也是多處錯(cuò)誤的根本原因。
2. ../linux-2.4.x/arch/armnommu/config.in
在if [ "$CONFIG_BOARD_SNDS100" = "y" ]項(xiàng)中添加:
define_bool CONFIG_CPU_S3C4510 y
[說明]在這個(gè)配置文件中,CONFIG_BOARD_SNDS100一項(xiàng)居然少了cpu類型定義,對比其他項(xiàng)就會(huì)發(fā)現(xiàn)這一問題,該項(xiàng)在armnommu/kernel/head-armv.S中用到。
3. ../linux-2.4.x/arch/armnommu/mach-snds100/Makefile
O_TARGET := samsung.o ->O_TARGET := snds100.o
[說明]這個(gè)makefile的修改是為了和1保持一致,再make的過程中,使用snds100標(biāo)識鏈接文件。
4. ../linux-2.4.x/arch/armnommu/kernel/head-armv.S
#if defined(CONFIG_ARCH_SAMSUNG) && defined(CONFIG_CPU_ARM710) ->
#if defined(CONFIG_CPU_S3C3410) || defined(CONFIG_CPU_S3C4530)
[說明]這里也是由于samsung和snds100使用環(huán)亂造成的,如果不修改,之后的一段程序?qū)⒈活A(yù)編譯,會(huì)出現(xiàn)LC0重定義的錯(cuò)誤,因?yàn)榇饲暗膕nds100已經(jīng)聲明LC0,實(shí)際上之后的程序時(shí)不應(yīng)該被預(yù)編譯的,那些是3410和4530專用的。
5. /Makefile
TFTPDIR = /tftpboot后加上:
LINUXTARGET=bzImage
# normal make targets 中加入:
.PHONY: images
images:
$(MAKE) -C $(VENDDIR) images
all: subdirs romfs modules modules_install image linux 后加入 images
[說明]這里的修改,和6的第一條是為了生成壓縮的rom映像文件和ramf可執(zhí)行的bin文件。
6. /vendors/Samsung/4510B/Makefile
最后加入:
images:
arm-elf-objcopy -O binary -R .note -R .comment -S $(ROOTDIR)/$(LINUXDIR)/linux $(IMAGEDIR)/uclinux_ram.bin
cp $(ROOTDIR)/$(LINUXDIR)/arch/armnommu/boot/zImage $(IMAGEDIR)/uclinux_rom.bin
同時(shí)注釋掉:$(CROSS_COMPILE)objcopy …… 部分
在 genromfs -v -V "ROMdisk" -f $(ROMFSIMG) -d $(ROMFSDIR) 后加入(這里生成romfs.o):
arm-elf-ld -r -o $(ROOTDIR)/$(LINUXDIR)/romfs.o -b binary $(ROMFSIMG)
[說明]第一條是5的延續(xù),第二條是生成romfs.o文件,以備后用。
7. ../linux-2.4.x /arch/armnommu/boot/compressed/Makefile
找到$(LD) $(ZLDFLAGS) $(HEAD) $(OBJS) piggy.o -o $(LINUX) 改為:
$(LD) $(ZLDFLAGS) $(HEAD) $(OBJS) piggy.o $(LIBGCC) -o $(LINUX)
[說明]生成linux kernel,包含必要的庫支持,$(LIBGCC)來自于arm-elf-tools庫。
找到ZLDFLAGS = -p -X -T $(LINUX).lds改為:
ZLDFLAGS = -p -X -T vmlinux.lds
[說明]這各鏈接文件是為帶mmu的板子準(zhǔn)備的,生成帶自解壓的映像文件,由$(LINUX)控制,這里我們直接使用,也可以直接將這個(gè)鏈接文件改名為linux.lds.
8. ../linux-2.4.x /arch/armnommu/vmlinux-armv.lds.in
找到 *(.got) /* Global offset table */
在其后加入:
romfs_data = .;
romfs.o
romfs_data_end = .;
在這里注意格式,這三句話之前后縮進(jìn);
[說明]在這個(gè)連接文件中將romfs.o連接到.text section中。
9. ../linux-2.4.x/arch/armnommu/mm/proc-arm6,7.S
mov r0, #0
#ifdef CONFIG_CPU_WITH_CACHE 改為:
#ifdef CONFIG_CPU_WITH_CACHE
mov r0, #0
[說明]這里可能是careless的錯(cuò)誤,對比舊版就可以理解。
10. ../linux-2.4.x /drivers/block/blkmem.c
/*
* Please, configure the ROMFS for your system here
*/
/*S3C4510b */
#ifdef CONFIG_ARCH_SAMSUNG
extern char romfs_data[];
extern char romfs_data_end[];
#endif
找到:
arena[] = { 加入:
#ifdef CONFIG_ARCH_SAMSUNG
{0, romfs_data, -1},
#endif
[說明]這里象0927版一樣少了針對samsung 的ro
熱門點(diǎn)擊
- 一種基于CPLD的偽隨機(jī)序列發(fā)生器
- 基于PIC18F系列單片機(jī)的嵌入式系統(tǒng)設(shè)計(jì)
- 嵌入式Email發(fā)送模塊
- 基于Xtensa LX處理器實(shí)現(xiàn)RRC濾波器
- 在S3C4510B評估板上移植uclinux
- 一種實(shí)時(shí)多任務(wù)系統(tǒng)軟件設(shè)計(jì)方法
- 基于ARM核的音頻解碼器單芯片系統(tǒng)
- 基于S7600A的嵌入式系統(tǒng)Internet
- 使用基于模型的設(shè)計(jì)來開發(fā)和驗(yàn)證安全關(guān)鍵系統(tǒng)軟
- 在應(yīng)用系統(tǒng)中嵌入WWW服務(wù)功能的實(shí)現(xiàn)方法
推薦技術(shù)資料
- 羅盤誤差及補(bǔ)償
- 造成羅盤誤差的主要因素有傳感器誤差、其他磁材料干擾等。... [詳細(xì)]
- CV/CC InnoSwitch3-AQ 開
- URF1DxxM-60WR3系
- 1-6W URA24xxN-x
- 閉環(huán)磁通門信號調(diào)節(jié)芯片NSDRV401
- SK-RiSC-SOM-H27X-V1.1應(yīng)
- RISC技術(shù)8位微控制器參數(shù)設(shè)
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動(dòng)IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計(jì)
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究