根据友善之臂提供的手册——《MINI2440 Linux移植开发实战指南-内核部分-2010.9.9》以及网络上一些帖子,在此对他们的工作表示感谢,基本过程大都一致,主要是为了熟悉内核的基本移植方法,目的是为了能够生成一个MINI2440上可用的内核。
开发环境:
主机:fedora 14
虚拟机:vmware workstation 10
交叉编译工具:arm-linux-gcc 4.3.2
开发板:mini2440(2m nor ,64m sdram,256m nand)
一、下载源码包解压到指定位置
下载地址:http://www.kernel.org/pub/linux/kernel/v2.6/
解压到指定的文件夹:tar xvzf linux-2.6.32.2.tar.gz –C /mydir
二、修改顶层Makefile
在第183行,修改如下:
exportKBUILD_BUILDHOST := $(SUBARCH)
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
三、检测编译
在根目录下,执行:
# make smdk2410_defconfig
#make
指定第一步之后,makefile会解析到arch/arm/configs目录下,找到s3c2410_defconfig,拷贝成一个.config文件,然后进行编译。编译时间比较长,一般都是没有问题的。
四、拷贝mach-smdk2440.c为蓝本
其实2.6.31以后已经开始支持mini2440.但是我们还是以smdk2440为蓝本,比较简单。
#cd arch/arm/mach-s3c2440
#rm –f mach-mini2440.c
#cp mach-smdk2440.c mach-mini2440.c
这样蓝本就制作好了。
五、修改机器码
在arch/arm/mach-s3c2440目录下:
vimmach-mini2440.c
将:
MACHINE_START(S3C2440,"SMDK2440")
修改为:
MACHINE_START(MINI2440,"FriendlyARM Mini2440 development board")
六、修改时钟频率
第163行函数,修改为如下:
s3c24xx_init_clocks(12000000);
因为我们的板子上的晶振是12M的,所以对应修改。
七、用mini2440替换smdk2440
在冒号模式下,输入如下命令:
:%s/smdk2440/mini2440/g
将该文件下所有的smdk2440关键字都改为mini2440,g代表全局,应该是进行了19次替换。
八、屏蔽smdk_machine_init()函数
在第173行,将其注释掉即可。
platform_add_devices(mini2440_devices,ARRAY_SIZE(mini2440_devices));
// smdk_machine_init();
}
九、编译测试
在根目录下:
#make mini2440_defconfig
#make zImage
编译成功以后,会在/arch/arm/boot生成zImage,这里使用mkz2uimage脚本,首先将编译成功的u-boot/tools/下生成的mkimage拷贝到/usr/local/bin下,这样命令就变为全局的。然后把mkz2uimage这个工具放到/arch/arm/boot目录下,执行./mkz2uimage,就可以生成我们需要的uImage,其实你也可以直接执行./mkimage,只不过需要自己使用-A,-O,-T这些参数比较麻烦,mkz2uimage也就是这些命令的集合。
如果成功的话,启动后,串口控制台会输出如下信息:
##Booting kernel from Legacy Image at 30008000 ...
Image Name: Linux kernel Image by embedclub
Created: 2015-09-06 0:39:43 UTC
ImageType: ARM Linux Kernel Image(uncompressed)
Data Size: 2047488 Bytes = 2 MB
Load Address: 30008000
Entry Point: 30008040
Verifying Checksum ... OK
XIP Kernel Image ... OK
OK
Startingkernel ...
UncompressingLinux.................................................................................................................................done, booting the kernel.
Linuxversion 2.6.32.2 (root@embedclub) (gcc version 4.3.2 (Sourcery G++ Lite2008q3-72) ) #2 Sat Sep 5 20:55:28 CST 2015
CPU:ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
CPU:VIVT data cache, VIVT instruction cache
Machine:FriendlyARM Mini2440 development board
Memorypolicy: ECC disabled, Data cache writeback
CPUS3C2440A (id 0x32440001)
S3C24XXClocks, (c) 2004 Simtec Electronics
S3C244X:core 405.000 MHz, memory 101.250 MHz, peripheral 50.625 MHz
CLOCK:Slow mode (1.500 MHz), fast, MPLL on, UPLL on
Built1 zonelists in Zone order, mobility grouping on. Total pages: 16256
Kernelcommand line: console=ttySAC0 root=/dev/nfs nfsroot=192.168.1.122:/opt/rootfsip=192.168.1.226:192.168.1.122:192.168.1.122:255.255.255.0:SMDK2440A.arm9.net:eth0:off
PIDhash table entries: 256 (order: -2, 1024 bytes)
Dentrycache hash table entries: 8192 (order: 3, 32768 bytes)
Inode-cachehash table entries: 4096 (order: 2, 16384 bytes)
Memory:64MB = 64MB total
Memory:60596KB available (3588K code, 417K data, 132K init, 0K highmem)
SLUB:Genslabs=11, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
HierarchicalRCU implementation.
NR_IRQS:85
irq:clearing subpending status 00000003
irq:clearing subpending status 00000002
Console:colour dummy device 80x30
console[ttySAC0] enabled
Calibratingdelay loop... 201.93 BogoMIPS (lpj=504832)
Mount-cachehash table entries: 512
CPU:Testing write buffer coherency: ok
NET:Registered protocol family 16
S3C2440:Initialising architecture
S3C2440:IRQ Support
S3C24XXDMA Driver, (c) 2003-2004,2006 Simtec Electronics
DMAchannel 0 at c4808000, irq 33
DMAchannel 1 at c4808040, irq 34
DMAchannel 2 at c4808080, irq 35
DMAchannel 3 at c48080c0, irq 36
S3C244X:Clock Support, DVS off
bio:create slab <bio-0> at 0
usbcore:registered new interface driver usbfs
usbcore:registered new interface driver hub
usbcore:registered new device driver usb
s3c-i2cs3c2440-i2c: slave address 0x10
s3c-i2cs3c2440-i2c: bus frequency set to 98 KHz
s3c-i2cs3c2440-i2c: i2c-0: S3C I2C adapter
NET:Registered protocol family 2
IProute cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP establishedhash table entries: 2048 (order: 2, 16384 bytes)
TCPbind hash table entries: 2048 (order: 1, 8192 bytes)
TCP:Hash tables configured (established 2048 bind 2048)
TCPreno registered
NET:Registered protocol family 1
RPC:Registered udp transport module.
RPC:Registered tcp transport module.
RPC:Registered tcp NFSv4.1 backchannel transport module.
JFFS2version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
ROMFSMTD (C) 2007 Red Hat, Inc.
msgmnihas been set to 118
alg:No test for stdrng (krng)
io schedulernoop registered
ioscheduler anticipatory registered (default)
ioscheduler deadline registered
ioscheduler cfq registered
Console:switching to colour frame buffer device 60x53
fb0:s3c2410fb frame buffer device
s3c2440-uart.0:s3c2410_serial0 at MMIO 0x50000000 (irq = 70) is a S3C2440
s3c2440-uart.1:s3c2410_serial1 at MMIO 0x50004000 (irq = 73) is a S3C2440
s3c2440-uart.2:s3c2410_serial2 at MMIO 0x50008000 (irq = 76) is a S3C2440
brd:module loaded
S3C24XXNAND Driver, (c) 2004 Simtec Electronics
dm9000Ethernet Driver, V1.31
ohci_hcd:USB 1.1 'Open' Host Controller (OHCI) Driver
s3c2410-ohcis3c2410-ohci: S3C24XX OHCI
s3c2410-ohcis3c2410-ohci: new USB bus registered, assigned bus number 1
s3c2410-ohcis3c2410-ohci: irq 42, io mem 0x49000000
usbusb1: configuration #1 chosen from 1 choice
hub1-0:1.0: USB hub found
hub1-0:1.0: 2 ports detected
usbcore:registered new interface driver libusual
mice:PS/2 mouse device common for all mice
S3C24XXRTC, (c) 2004,2006 Simtec Electronics
i2c/dev entries driver
S3C2410Watchdog Timer, (c) 2004 Simtec Electronics
s3c2410-wdts3c2410-wdt: watchdog inactive, reset disabled, irq enabled
cpuidle:using governor ladder
sdhci:Secure Digital Host Controller Interface driver
sdhci:Copyright(c) Pierre Ossman
usbcore:registered new interface driver hiddev
usbcore:registered new interface driver usbhid
usbhid:v2.6:USB HID core driver
AdvancedLinux Sound Architecture Driver Version 1.0.21.
Nodevice for DAI UDA134X
Nodevice for DAI s3c24xx-i2s
ALSAdevice list:
No soundcards found.
TCPcubic registered
NET:Registered protocol family 17
drivers/rtc/hctosys.c:unable to open rtc device (rtc0)
说明初步成功了,下面一步步的完善,使其可以挂载nfs和yaffs2文件系统。