歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> linux-2.6.30.4移植至2440開發板

linux-2.6.30.4移植至2440開發板

日期:2017/3/1 10:04:05   编辑:Linux編程

一、下載linux-2.6.30.4源碼,並解壓
ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.30.4.tar.gz

tar zxvf linux-2.6.30.4.tar.gz

二、在系統中添加對ARM的支持
$vim Makefile

193#ARCH ?= $(SUBARCH)

194#CROSS_COMPILE ?=

195 ARCH=arm

196 CROSS_COMPILE=arm-linux-

三、修改系統時鐘
$vim arch/arm/mach-s3c2440/mach-smdk2440.c

系統的外部時鐘為12MHz

160static void __init smdk2440_map_io(void)

161{

162s3c24xx_init_io(smdk2440_iodesc,ARRAY_SIZE(smdk2440_iodesc));

163//s3c24xx_init_clocks(16934400);

164//edit by

165 s3c24xx_init_clocks(12000000);

166s3c24xx_init_uarts(smdk2440_uartcfgs,ARRAY_SIZE(smdk2440_uartcfgs));

167}

說明:如果系統時鐘不匹配,則出現亂碼。

四、制作或者獲取內核配置單.config
$make menuconfig

說明:一個比較好的做法是先調用自帶的配置清單,該配置清單在arch/arm/configs目錄,文件名為:s3c2410_defconfig,該配置文件幾乎S3C24XX系列CPU的配置項,可以在此基礎上修改配置項。x86的配置項在arch/x86/configs目錄下,文件名為:i386_defconfig(32為cpu)。

cp arch/arm/configs/s3c2410_defconfig .config

五、修改機器碼
【linux內核源碼中查看機器碼相關文件:】

$vim arch/arm/mach-s3c2440/mach-smdk2440.c

178 MACHINE_START(S3C2440 , "SMDK2440")

179/* Maintainer: Ben Dooks <[email protected]> */

180.phys_io = S3C2410_PA_UART,

181.io_pg_offst = (((u32)S3C24XX_VA_UART)>> 18) & 0xfffc,

182.boot_params = S3C2410_SDRAM_PA+ 0x100,

183

184 .init_irq = s3c24xx_init_irq,

185.map_io = smdk2440_map_io,

186.init_machine = smdk2440_machine_init,

187.timer = &s3c24xx_timer,

188MACHINE_END

修改機器碼,使之與bootloader的機器碼相同,這裡使用的是u-boot,機器碼為168

$vim arch/arm/tools/mach-types

379 s3c2440 ARCH_S3C2440 S3C2440168

$vim arch/arm/tools/Makefile

7 include/asm-arm/mach-types.h :$(src)/gen-mach-types $(src)/mach-types

8@echo ' Generating $@'

9@mkdir -p $(dir $@)

10$(Q)$(AWK) -f $^ > $@ || { rm -f $@; /bin/false; }

$vim include/asm/mach-types.h

375 #define MACH_TYPE_S3C2440168 //這個沒有找見

【U-boot中的相關配置文件】

$vim include/asm-arm/mach-types.h

377 #define MACH_TYPE_S3C2440 168

總結:首先從linux內核源碼中找出機器類型(如S3C2440 ),其次,根據u-boot中給出的對應機器類型的機器碼(如377 #define MACH_TYPE_S3C2440 168 )修改內核機器碼。流程如下:

內核:

$vimarch/arm/mach-s3c2440/mach-smdk2440.c

U-boot:

$viminclude/asm-arm/mach-types.h

內核:

$vimarch/arm/tools/mach-types

說明:如果機器碼錯誤,則系統提示選取平台,死機。

六、編譯鏡像
$make zImage

七、板子燒寫
使用DNW工具將內核鏡像燒寫至開發板中

八、遇到的問題
問題:

Kernel panic - not syncing: Attempted to kill init!

解決辦法:

$make menuconfig

選擇以下兩項:

Kernel Features --->

[*] Use the ARM EABI to compile the kernel

[*] Allow old ABI binaries to run with this kernel (EXPERIMENTAL)

Copyright © Linux教程網 All Rights Reserved