参照网上的步骤如下:
修改配置文件:1.修改Makefile,匹配交叉编译器。
在内核代码根目录下:vim Makefile
找到ARCH:(用vi的查找命令/ARCH)
修改为
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
CORSS_COMPILE视自己的环境而定。
2. 为了内核支持devfs 以及在启动时并在/sbin/init 运行之前能自动挂载/dev为devfs 文件系统。编辑fs/Kconfig:
menu "Pseudo filesystems"添加如下代码:
config DEVFS_FS
bool "/dev file system support (OBSOLETE)"
default y
config DEVFS_MOUNT
bool "Automatically mount at boot"
default y
depends on DEVFS_FS------------------------------------------------------------------------------------------------------------
修改源代码:1. 添加yaffs2源码。
首先解压下载的yaffs2源码,解压后是cvs,有两个文件夹,找到yaffs2文件夹,里面有个patch-ker.sh,运行它,./patch-ker.sh /linux-2.6.29.2(这个为内核源码解压后的路径)
2. 在arch/arm/plat-s3c24xx/common-smdk.c我这设置为3个分区,这个要和你的bootLoad的分区情况一样,否则加载内核可能失败。
可以在bootload模式下通过part show查看分区情况,然后设置这里的值。
在我的板子中修改如下:
static int chip0_map[] = { 0 };
struct mtd_partition bit_default_nand_part[] = {
[0] = {
.name = "supervivi",
.offset = 0x00000000,
.size = 0x00030000,
},
[1] = {
.name = "kernel",
.offset = 0x00050000,
.size = 0x00200000,
},
[2] = {
.name = "root",
.offset = 0x00250000,
.size = 0x03dac000,
}
};
3. 在arch/arm/mach-s3c2440/mach-smdk2440.c中添加nand设备
static struct platform_device *smdk2440_devices[] __initdata = {
&s3c_device_usb,
&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c,
&s3c_device_nand, &s3c_device_iis,
};
4.由于添加了内容,需要添加相应头文件:
在mach-smdk2440.c中添加
#include <linux/mtd/partitions.h>
#include <linux/mtd/nand.h>
#include <linux/device.h>
否则会报错。
5.修改内核文件
修改cpu ID,不修改将会出现无法进入内核由于CPU mach_type 不对应找不到对应的CPU。
arch/arm/tools/mach-types 这个文件打开修改 对应CPU 的ID
比如我修改 S3C2440 对应为 782,把原来为782的改成其他的数字。
------------------------------------------------------------------------------------------------------------
配置先把默认配置文件拷贝过来
cp arch/arm/configs/s3c2410_defconfig .config
配置
Make menuconfig
[*] Enable loadable module support --->
[*] Module unloading
System Type ---->
[*] S3C2410 DMA support
S3C2410 Machines --->
[*] SMDK2410/A9M2410
S3C2440 Machines --->
[*] SMDK2440
[*] SMDK2440 with S3C2440 CPU module
Boot option ----->
修改启动参数为:
noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200
Device Drivers --->
<*> Memory Technology Device (MTD) support --->
[*] MTD partitioning support
<*> NAND Device Support --->
<*> NAND Flash support for S3C2410/S3C2440 SoC
[ ] S3C2410 NAND Hardware ECC //这个要去掉
File System--->
Miscellaneous filesystems--->
<*>YAFFS2 filesystem support
<*>Autoselect yaffs2 format
……
……
<>journalling flash file systemversion(jffs) support
<>journalling flash file systemversion2(jffs2) support取消这两个,否则当你的root_fs是yaffs2时,由于jffs和yaffs2文件系统都没有超级块,即不能识别文件类型,jffs也能挂载yaffs2系统,只不过他读的数据都是错的,并将所有数据放在/lost+found文件夹中,故如果jffs也加载了,他可能先挂载yaffs系统,这样就会挂载失败。
其他的选择默认就可以了。
------------------------------------------------------------------------------------------------------------
编译内核 执行make zImage
---------------------------------------------------------------------------------------------------------------
以上就是我配置编译的全部过程,将zImage和友善之臂给的root_qtopia.img文件下载到板子上,出现了如下提示:
Enter your selection: b
Copy linux kernel from 0x00050000 to 0x30008000, size = 0x00200000 ... done
zImage magic = 0x016f2818
Setup linux parameters at 0x30000100
linux command line is: "noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySA
C0"
MACH_TYPE = 782
NOW, Booting Linux......
Uncompressing Linux.............................................................
.................................................... done, booting the kernel.
Linux version 2.6.29.2 (root@denton-desktop) (gcc version 4.3.2 (Sourcery G++ Li
te 2008q3-72) ) #3 Sat May 16 16:28:29 CST 2009
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
CPU: VIVT data cache, VIVT instruction cache
Machine: SMDK2440
ATAG_INITRD is deprecated; please update your bootloader.
Memory policy: ECC disabled, Data cache writeback
CPU S3C2440A (id 0x32440001)
S3C24XX Clocks, (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
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 16256
Kernel command line: noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0
irq: clearing subpending status 00000003
irq: clearing subpending status 00000002
PID hash table entries: 256 (order: 8, 1024 bytes)
Console: colour dummy device 80x30
console [ttySAC0] enabled
Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
Memory: 64MB = 64MB total
Memory: 61176KB available (3228K code, 306K data, 140K init)
Calibrating delay loop... 201.93 BogoMIPS (lpj=504832)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
net_namespace: 716 bytes
NET: Registered protocol family 16
kobject (c0357f7c): tried to init an initialized object, something is seriously
wrong.
[<c0294a34>] (dump_stack+0x0/0x14) from [<c014e548>] (kobject_init+0x40/0x78)
[<c014e508>] (kobject_init+0x0/0x78) from [<c0190ed8>] (device_initialize+0x28/0
x94)
r5:c00281ec r4:c0357f38
[<c0190eb0>] (device_initialize+0x0/0x94) from [<c0194b04>] (platform_device_reg
ister+0x18/0x24)
r4:c0357f30
[<c0194aec>] (platform_device_register+0x0/0x24) from [<c0194d78>] (platform_add
_devices+0x24/0x68)
r4:00000000
[<c0194d54>] (platform_add_devices+0x0/0x68) from [<c0012b20>] (smdk_machine_ini
t+0xa0/0xbc)
r7:00000000 r6:00000000 r5:00000000 r4:c00278cc
[<c0012a80>] (smdk_machine_init+0x0/0xbc) from [<c00113ac>] (smdk2440_machine_in
it+0x30/0x38)
[<c001137c>] (smdk2440_machine_init+0x0/0x38) from [<c000e838>] (customize_machi
ne+0x20/0x2c)
r4:c0023e44
[<c000e818>] (customize_machine+0x0/0x2c) from [<c002b2d0>] (__exception_text_en
d+0x60/0x198)
[<c002b270>] (__exception_text_end+0x0/0x198) from [<c0008598>] (kernel_init+0x8
0/0xec)
[<c0008518>] (kernel_init+0x0/0xec) from [<c004ed68>] (do_exit+0x0/0x66c)
r4:00000000
------------[ cut here ]------------
WARNING: at fs/sysfs/dir.c:462 sysfs_add_one+0x30/0x44()
sysfs: duplicate filename 's3c2440-nand' can not be created
Modules linked in:
[<c0294a34>] (dump_stack+0x0/0x14) from [<c004be80>] (warn_slowpath+0x6c/0x88)
[<c004be14>] (warn_slowpath+0x0/0x88) from [<c00d9ea0>] (sysfs_add_one+0x30/0x44
)
r3:c3850440 r2:c030ebbe
r7:c380d2a0 r6:c0357f7c r5:c38526c0 r4:ffffffef
[<c00d9e70>] (sysfs_add_one+0x0/0x44) from [<c00da478>] (create_dir+0x58/0xa8)
r5:c38526c0 r4:c3817df8
[<c00da420>] (create_dir+0x0/0xa8) from [<c00da508>] (sysfs_create_dir+0x40/0x5c
)
r8:c0365600 r7:c0357fa0 r6:c0365600 r5:00000000 r4:c0357f7c
[<c00da4c8>] (sysfs_create_dir+0x0/0x5c) from [<c014e874>] (kobject_add_internal
+0xc0/0x194)
r4:c0357f7c
[<c014e7b4>] (kobject_add_internal+0x0/0x194) from [<c014ea24>] (kobject_add_var
g+0x40/0x50)
r8:c0357fa0 r7:c0357fa0 r6:c0365600 r5:00000000 r4:c0357f7c
[<c014e9e4>] (kobject_add_varg+0x0/0x50) from [<c014ead0>] (kobject_add+0x58/0x6
4)
r6:c0357f30 r5:c0357f38 r4:0000001c
[<c014ea78>] (kobject_add+0x0/0x64) from [<c01912cc>] (device_add+0x78/0x4e0)
r3:c0357fa0 r2:c032aa38
[<c0191254>] (device_add+0x0/0x4e0) from [<c0194a98>] (platform_device_add+0xf8/
0x14c)
[<c01949a0>] (platform_device_add+0x0/0x14c) from [<c0194b0c>] (platform_device_
register+0x20/0x24)
r7:00000005 r6:00000000 r5:c00281ec r4:c0357f30
[<c0194aec>] (platform_device_register+0x0/0x24) from [<c0194d78>] (platform_add
_devices+0x24/0x68)
r4:00000000
[<c0194d54>] (platform_add_devices+0x0/0x68) from [<c0012b20>] (smdk_machine_ini
t+0xa0/0xbc)
r7:00000000 r6:00000000 r5:00000000 r4:c00278cc
[<c0012a80>] (smdk_machine_init+0x0/0xbc) from [<c00113ac>] (smdk2440_machine_in
it+0x30/0x38)
[<c001137c>] (smdk2440_machine_init+0x0/0x38) from [<c000e838>] (customize_machi
ne+0x20/0x2c)
r4:c0023e44
[<c000e818>] (customize_machine+0x0/0x2c) from [<c002b2d0>] (__exception_text_en
d+0x60/0x198)
[<c002b270>] (__exception_text_end+0x0/0x198) from [<c0008598>] (kernel_init+0x8
0/0xec)
[<c0008518>] (kernel_init+0x0/0xec) from [<c004ed68>] (do_exit+0x0/0x66c)
r4:00000000
---[ end trace 1b75b31a2719ed1c ]---
kobject_add_internal failed for s3c2440-nand with -EEXIST, don't try to register
things with the same name in the same directory.
[<c0294a34>] (dump_stack+0x0/0x14) from [<c014e900>] (kobject_add_internal+0x14c
/0x194)
[<c014e7b4>] (kobject_add_internal+0x0/0x194) from [<c014ea24>] (kobject_add_var
g+0x40/0x50)
r8:c0357fa0 r7:c0357fa0 r6:c0365600 r5:00000000 r4:c0357f7c
[<c014e9e4>] (kobject_add_varg+0x0/0x50) from [<c014ead0>] (kobject_add+0x58/0x6
4)
r6:c0357f30 r5:c0357f38 r4:0000001c
[<c014ea78>] (kobject_add+0x0/0x64) from [<c01912cc>] (device_add+0x78/0x4e0)
r3:c0357fa0 r2:c032aa38
[<c0191254>] (device_add+0x0/0x4e0) from [<c0194a98>] (platform_device_add+0xf8/
0x14c)
[<c01949a0>] (platform_device_add+0x0/0x14c) from [<c0194b0c>] (platform_device_
register+0x20/0x24)
r7:00000005 r6:00000000 r5:c00281ec r4:c0357f30
[<c0194aec>] (platform_device_register+0x0/0x24) from [<c0194d78>] (platform_add
_devices+0x24/0x68)
r4:00000000
[<c0194d54>] (platform_add_devices+0x0/0x68) from [<c0012b20>] (smdk_machine_ini
t+0xa0/0xbc)
r7:00000000 r6:00000000 r5:00000000 r4:c00278cc
[<c0012a80>] (smdk_machine_init+0x0/0xbc) from [<c00113ac>] (smdk2440_machine_in
it+0x30/0x38)
[<c001137c>] (smdk2440_machine_init+0x0/0x38) from [<c000e838>] (customize_machi
ne+0x20/0x2c)
r4:c0023e44
[<c000e818>] (customize_machine+0x0/0x2c) from [<c002b2d0>] (__exception_text_en
d+0x60/0x198)
[<c002b270>] (__exception_text_end+0x0/0x198) from [<c0008598>] (kernel_init+0x8
0/0xec)
[<c0008518>] (kernel_init+0x0/0xec) from [<c004ed68>] (do_exit+0x0/0x66c)
r4:00000000
S3C2410 Power Management, (c) 2004 Simtec Electronics
S3C2440: Initialising architecture
S3C2440: IRQ Support
S3C24XX DMA Driver, (c) 2003-2004,2006 Simtec Electronics
DMA channel 0 at c4808000, irq 33
DMA channel 1 at c4808040, irq 34
DMA channel 2 at c4808080, irq 35
DMA channel 3 at c48080c0, irq 36
S3C244X: Clock Support, DVS off
bio: create slab <bio-0> at 0
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 2048 (order: 2, 16384 bytes)
TCP bind hash table entries: 2048 (order: 1, 8192 bytes)
TCP: Hash tables configured (established 2048 bind 2048)
TCP reno registered
NET: Registered protocol family 1
NetWinder Floating Point Emulator V0.97 (extended precision)
yaffs May 16 2009 15:42:11 Installing.
msgmni has been set to 119
io scheduler noop registered
io scheduler anticipatory registered (default)
io scheduler deadline registered
io scheduler cfq registered
Console: switching to colour frame buffer device 30x40
fb0: s3c2410fb frame buffer device
lp: driver loaded but no devices found
ppdev: user-space parallel port driver
Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
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
loop: module loaded
dm9000 Ethernet Driver, V1.31
Uniform Multi-Platform E-IDE driver
ide-gd driver 1.18
ide-cd driver 5.00
Driver 'sd' needs updating - please use bus_type methods
S3C24XX NAND Driver, (c) 2004 Simtec Electronics
usbmon: debugfs is not available
ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
s3c2410-ohci s3c2410-ohci: S3C24XX OHCI
s3c2410-ohci s3c2410-ohci: new USB bus registered, assigned bus number 1
s3c2410-ohci s3c2410-ohci: irq 42, io mem 0x49000000
usb usb1: configuration #1 chosen from 1 choice
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 2 ports detected
usbcore: registered new interface driver libusual
usbcore: registered new interface driver usbserial
USB Serial support registered for generic
usbcore: registered new interface driver usbserial_generic
usbserial: USB Serial Driver core
USB Serial support registered for FTDI USB Serial Device
usbcore: registered new interface driver ftdi_sio
ftdi_sio: v1.4.3:USB FTDI Serial Converters Driver
USB Serial support registered for pl2303
usbcore: registered new interface driver pl2303
pl2303: Prolific PL2303 USB to serial adaptor driver
mice: PS/2 mouse device common for all mice
s3c2440-i2c s3c2440-i2c: slave address 0x10
s3c2440-i2c s3c2440-i2c: bus frequency set to 98 KHz
s3c2440-i2c s3c2440-i2c: i2c-0: S3C I2C adapter
S3C2410 Watchdog Timer, (c) 2004 Simtec Electronics
s3c2410-wdt s3c2410-wdt: watchdog inactive, reset disabled, irq enabled
TCP cubic registered
NET: Registered protocol family 17
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
Root-NFS: No NFS server available, giving up.
VFS: Unable to mount root fs via NFS, trying floppy.
VFS: Cannot open root device "mtdblock2" or unknown-block(2,0)
Please append a correct "root=" boot option; here are the available partitions:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
--------------------------------------------------------------------------------------------------------------
kobject (c0357f7c): tried to init an initialized object, something is seriously
wrong.
[<c0294a34>] (dump_stack+0x0/0x14) from [<c014e548>] (kobject_init+0x40/0x78)
[<c014e508>] (kobject_init+0x0/0x78) from [<c0190ed8>] (device_initialize+0x28/0
x94)
r5:c00281ec r4:c0357f38
[<c0190eb0>] (device_initialize+0x0/0x94) from [<c0194b04>] (platform_device_reg
ister+0x18/0x24)
r4:c0357f30
[<c0194aec>] (platform_device_register+0x0/0x24) from [<c0194d78>] (platform_add
_devices+0x24/0x68)
r4:00000000
[<c0194d54>] (platform_add_devices+0x0/0x68) from [<c0012b20>] (smdk_machine_ini
t+0xa0/0xbc)
r7:00000000 r6:00000000 r5:00000000 r4:c00278cc
[<c0012a80>] (smdk_machine_init+0x0/0xbc) from [<c00113ac>] (smdk2440_machine_in
it+0x30/0x38)
[<c001137c>] (smdk2440_machine_init+0x0/0x38) from [<c000e838>] (customize_machi
ne+0x20/0x2c)
r4:c0023e44
[<c000e818>] (customize_machine+0x0/0x2c) from [<c002b2d0>] (__exception_text_en
d+0x60/0x198)
[<c002b270>] (__exception_text_end+0x0/0x198) from [<c0008598>] (kernel_init+0x8
0/0xec)
[<c0008518>] (kernel_init+0x0/0xec) from [<c004ed68>] (do_exit+0x0/0x66c)
r4:00000000
.
这是什么错误?看不懂啊!初始化时出现了错误?之后还有很多问题,各位帮忙分析一下,一直都没自己移植成功过


谢谢!!!