移植標準Linux到S3C2410
此處需要自行加入內核解壓前處理器初始化文件head-s3c2410.s,示例代碼:
.section .start, ax
__S3C2410_start:
bic r2, pc, #0x1f @清除pc相關(guān)位,放于r2
add r3, r2, #0x4000
1: ldr r0, [r2], #32
teq r2, r3
bne 1b
mcr p15, 0, r0, c7, c10, 4 @ 寫(xiě)回 Write Buffer
mcr p15, 0, r0, c7, c7, 0 @ 刷新 I D caches
#if 0
@ 禁用MMU ,caches
……
#endif
mov r0, #0x00200000
1: subs r0, r0, #1
bne 1b
/arch/arm/kernel/ Makefile
依樣將$(CONFIG_ARCH_2400) $(CONFIG_ARCH_2410) 加入
no-irq-arch :=$(CONFIG_ARCH_INTEGRATOR) $(CONFIG_ARCH_CLPS711X)
……
$(CONFIG_ARCH_AT91RM9200
并添加 obj-$(CONFIG_MIZI) += ecard.o
obj-$(CONFIG_ARCH_APM) +=apm2.o
/arch/arm/kernel/entry-armv.S
此文件主要定義CPU初始化時(shí)中斷處理部分[6],可參考處理器使用手冊,按處理器使用要求設置。
/arch/arm/kernel/debug-armv.S
此文件用于最基本的串口調試功能[6],包括調試串口的地址初始化、發(fā)送、等待、忙狀態(tài)定義等。使用此文件可以在啟動(dòng)過(guò)程中打印出相關(guān)信息。
/arch/arm/kernel/setup.c
在此文件中要根據使用的板子設置幾個(gè)變量[5]。nr_banks指定了內存塊的數量,bank指定了每塊內存塊的范圍,PAGE_OFFSET是內存起始地址,MEM_SIZE是內存的大小。PAGE_OFFSET,MEM_SIZE要在/include/asm-arm/arch-s3c2410中定義。
/arch/arm/mm/mm-armv.c
此文件用于與硬件相關(guān)的內存管理,如初始化內存頁(yè)表內存映射等。
將init_maps->bufferable = 0;改為 init_maps->bufferable = 1;
/arch/arm/mach-s3c2410
建立相應目錄并按照處理器使用要求編寫(xiě)irq.c,mm.c,time.c,arch.c,Makefile,分別實(shí)現中斷控制器的初始化,地址的虛實(shí)映射關(guān)系,時(shí)鐘中斷和實(shí)時(shí)時(shí)鐘處理以及有關(guān)Ramdisk使用參數等的設置。
/include/asm-arm/arch-s3c2410
此目錄下定義用到的頭文件。
至此移植工作基本完成,再進(jìn)行如下編譯過(guò)程,即可得到我們需要的映像文件[4]。
make dep; make clean; make zImage
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)
評論