Linux2.6.24.4 移植到S3C2410(nano2410)
2013-01-28
Kevin(随风)
标签: S3C2410 Linux

内核移植篇

CS8900 移植

建立nfs 根文件系统(busybox1.9.2)

【平台信息】

目标板(Nano2410)------------------------

CPU: S3C2410X

SDRAM: HY57V561620(32MB)

FLASH: K9F1208(64MB)

NET: CS8900

HOST---------------------------------------

Linux Realse Version: Fecora Cor 8 (FC8)

CrossCompiler: gcc-4.1.1/glibc-2.3.2

Linux2.6.24.4 移植到S3C2410(nano2410)之:

内核移植篇

1. 解压linux-2.6.24.4。

2. 编辑Makefile,修改目标cpu 体系结构和交叉编译工具的路径。

[kevin@localhost linux-2.6.24.4]$ vim Makefile

第193 行改为:

ARCH ?= arm

CROSS_COMPILE ?= /opt/tool/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-

CROSS_COMPILE 根据自己所使用的交叉编译器路径设置。

3.复制编译配置文件到linux-2.6.24.4 下面。移植过程以sdmk2410 开发板为模板。

[kevin@localhostlinux-2.6.24.4]$cp arch/arm/configs/s3c2410_defconfig .config

4.修改NandFlash 分区信息。

[kevin@localhostlinux-2.6.24.4]$vim arch/arm/plat-s3c24xx/common-smdk.c

第108 行smdk_default_nand_part[]修改如下:

static struct mtd_partition smdk_default_nand_part[] = {

#if 0

[0] = {

.name = "Boot Agent",

.size = SZ_16K,

.offset = 0,

},

[1] = {

.name = "S3C2410 flash partition 1",

.offset = 0,

.size = SZ_2M,

},

[2] = {

.name = "S3C2410 flash partition 2",

.offset = SZ_4M,

.size = SZ_4M,

},

[3] = {

.name = "S3C2410 flash partition 3",

.offset = SZ_8M,

.size = SZ_2M,

},

[4] = {

.name = "S3C2410 flash partition 4",

.offset = SZ_1M * 10,

.size = SZ_4M,

},

[5] = {

.name = "S3C2410 flash partition 5",

.offset = SZ_1M * 14,

.size = SZ_1M * 10,

},

[6] = {

.name = "S3C2410 flash partition 6",

.offset = SZ_1M * 24,

.size = SZ_1M * 24,

},

[7] = {

.name = "S3C2410 flash partition 7",

.offset = SZ_1M * 48,

.size = SZ_16M,

}

#else

[0] = {

.name = "U-Boot",

.size = SZ_1M,

.offset = 0,

},

[1] = {

.name = "Linux Kernel",

.offset = SZ_1M,

.size = SZ_3M,

},

[2] = {

.name = "Root",

.offset = SZ_4M,

.size = SZ_4M * 10,

},

[3] = {

.name = "User",

.offset = SZ_4M * 11,

.size = SZ_4M * 5,

},

#endif

};

5.为了我们的内核支持devfs 以及在启动时并在/sbin/init 运行之前能自动挂载/dev 为devfs 文件系统。编辑fs/Kconfig:

在902 行menu "Pseudo filesystems"下面添加如下代码:

#+kevin -->

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

#+kevin <--

6.OK,现在先编译一下内核。下载到目标板看看内核能否启动。

[kevin@localhost linux-2.6.24.4]$ make menuconfig

在配置菜单中,选择system type-->s3c2410 machines 中的smdk2410

其他的arch-machines 全部取消。

[kevin@localhost linux-2.6.24.4]$ make zImage

编译完成后在arch/arm/boot 下会有一个zImage

[kevin@localhost linux-2.6.24.4]$ cd arch/arm/boot

[kevin@localhost boot]$ ls

bootp compressed Image install.sh Makefile zImage

因为使用的bootloader 是UBoot,下面需要把zImga 转换成Uboot 可以使用的uImage.

将Uboot 编译后生成的tools/mkImage 文件copy 到/bin 下面。然后允许下面的命令

mkimage -A arm -O linux -T kernel -C none -a 30008000 -e 30008040 - n "linux kernel" -d zImage

uImage

我将该命令写在一个脚本文件mk.sh 中了。执行该命令后在boot 目录会多出一个uImage 文件

[kevin@localhost boot]$ sh mk.sh

Image Name: linux kernel

Created: Sat Mar 29 16:50:21 2008

Image Type: ARM Linux Kernel Image (uncompressed)

Data Size: 1545360 Bytes = 1509.14 kB = 1.47 MB

Load Address: 0x30008000

Entry Point: 0x30008040

通过uboot 把uImage 加载到SDRAM 的0x30008000 处,并执行bootm。会看到以下启动信息。

Kevin2410 > run lk

TFTP from server 192.168.0.102; our IP address is 192.168.0.69

Filename 'uImage'.

Load address: 0x30008000

Loading: #################################################################

#########################################

done

Bytes transferred = 1545424 (1794d0 hex)

## Booting image at 30008000 ...

Image Name: linux kernel

Created: 2008-03-29 8:50:21 UTC

Image Type: ARM Linux Kernel Image (uncompressed)

Data Size: 1545360 Bytes = 1.5 MB

Load Address: 30008000

Entry Point: 30008040

Verifying Checksum ... OK

XIP Kernel Image ... OK

Starting kernel ...

Uncompressing Linux.................................................................................................... done,

booting the kernel.

Linux version 2.6.24.4 (kevin@localhost.localdomain) (gcc version 4.1.1) #1 Sat Mar 29

16:42:31 CST 2008

CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=00007177

Machine: SMDK2410

Memory policy: ECC disabled, Data cache writeback

CPU S3C2410A (id 0x32410002)

S3C2410: core 202.800 MHz, memory 101.400 MHz, peripheral 50.700 MHz

S3C24XX Clocks, (c) 2004 Simtec Electronics

CLOCK: Slow mode (1.500 MHz), fast, MPLL on, UPLL on

CPU0: D VIVT write-back cache

CPU0: I cache: 16384 bytes, associativity 64, 32 byte lines, 8 sets

CPU0: D cache: 16384 bytes, associativity 64, 32 byte lines, 8 sets

Built 1 zonelists in Zone order, mobility grouping on. Total pages: 8128

Kernel command line: console=ttySAC0,115200 root=/dev/nfs init=/linuxrc

nfsroot=192.168.0.104:/nano2410/root

ip=192.168.0.69:192.168.0.104:192.168.0.1:255.255.255.0:www.kevin.com:eth0:off【Uboot

中设置的command line 参数】

irq: clearing pending ext status 00000200

irq: clearing subpending status 00000002

PID hash table entries: 128 (order: 7, 512 bytes)

timer tcon=00500000, tcnt a509, tcfg 00000200,00000000, usec 00001e4c

Console: colour dummy device 80x30

console [ttySAC0] enabled

Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)

Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)

Memory: 32MB = 32MB total

Memory: 29188KB available (2840K code, 296K data, 116K init)

Mount-cache hash table entries: 512

CPU: Testing write buffer coherency: ok

net_namespace: 64 bytes

NET: Registered protocol family 16

S3C2410 Power Management, (c) 2004 Simtec Electronics

S3C2410: Initialising architecture

S3C24XX DMA Driver, (c) 2003-2004,2006 Simtec Electronics

DMA channel 0 at c2800000, irq 33

DMA channel 1 at c2800040, irq 34

DMA channel 2 at c2800080, irq 35

DMA channel 3 at c28000c0, irq 36

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: 1024 (order: 1, 8192 bytes)

TCP bind hash table entries: 1024 (order: 0, 4096 bytes)

TCP: Hash tables configured (established 1024 bind 1024)

TCP reno registered

NetWinder Floating Point Emulator V0.97 (double precision)

JFFS2 version 2.2. (NAND) 漏 2001-2006 Red Hat, Inc.

io scheduler noop registered

io scheduler anticipatory registered (default)

io scheduler deadline registered

io scheduler cfq registered

s3c2410-lcd s3c2410-lcd: no platform data for lcd, cannot attach

s3c2410-lcd: probe of s3c2410-lcd failed with error -22

lp: driver loaded but no devices found

ppdev: user-space parallel port driver

Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing enabled

s3c2410-uart.0: s3c2410_serial0 at MMIO 0x50000000 (irq = 70) is a S3C2410

s3c2410-uart.1: s3c2410_serial1 at MMIO 0x50004000 (irq = 73) is a S3C2410

s3c2410-uart.2: s3c2410_serial2 at MMIO 0x50008000 (irq = 76) is a S3C2410

RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize

loop: module loaded

dm9000 Ethernet Driver

Uniform Multi-Platform E-IDE driver Revision: 7.00alpha2

ide: Assuming 50MHz system bus speed for PIO modes; override with idebus=xx

S3C24XX NAND Driver, (c) 2004 Simtec Electronics

s3c2410-nand s3c2410-nand: Tacls=3, 29ns Twrph0=7 69ns, Twrph1=3 29ns

NAND device: Manufacturer ID: 0xec, Chip ID: 0x76 (Samsung NAND 64MiB 3,3V 8-bit)

Scanning device for bad blocks

Creating 4 MTD partitions on "NAND 64MiB 3,3V 8-bit":

0x00000000-0x00100000 : "U-Boot"

0x00100000-0x00400000 : "Linux Kernel"

0x00400000-0x02c00000 : "Root"

0x02c00000-0x04000000 : "User"【分区信息】

usbmon: debugfs is not available

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

mice: PS/2 mouse device common for all mice

S3C24XX RTC, (c) 2004,2006 Simtec Electronics

s3c2410-i2c s3c2410-i2c: slave address 0x10

s3c2410-i2c s3c2410-i2c: bus frequency set to 99 KHz

s3c2410-i2c s3c2410-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 1

RPC: Registered udp transport module.

RPC: Registered tcp transport module.

drivers/rtc/hctosys.c: unable to open rtc device (rtc0)

IP-Config: Device `eth0' not found.【网卡驱动NG】

Looking up port of RPC 100003/2 on 192.168.0.104

rpcbind: server 192.168.0.104 not responding, timed out

Root-NFS: Unable to get nfsd port number from server, using default

Looking up port of RPC 100005/1 on 192.168.0.104

rpcbind: server 192.168.0.104 not responding, timed out

Root-NFS: Unable to get mountd port number from server, using default

mount: server 192.168.0.104 not responding, timed out

Root-NFS: Server returned error -5 while mounting /nano2410/root

VFS: Unable to mount root fs via NFS, trying floppy.

VFS: Cannot open root device "nfs" or unknown-block(2,0)

Please append a correct "root=" boot option; here are the available partitions:

1f00 1024 mtdblock0 (driver?)

1f01 3072 mtdblock1 (driver?)

1f02 40960 mtdblock2 (driver?)

1f03 20480 mtdblock3 (driver?)

Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)

----------------------------------------------------------------------

从以上信息中可以看到,网卡驱动加载失败。目标板使用的是CS8900,内核中没有该网卡ic 的驱动,

下一步的工作:移植CS8900 驱动。

共 3 页   123下一页
可能会用到的工具/仪表
本站简介 | 意见建议 | 免责声明 | 版权声明 | 联系我们
CopyRight@2024-2039 嵌入式资源网
蜀ICP备2021025729号