Linux-2.6.25移植 www.gzweiyan.com
4月17号linux-2.6.25稳定版发布,我们(伟研科技) 将该内核移植到S3C2440平台上,下面是我们移植的第一步:
编译内核: 1) 解压内核,当前目录为/new_disk/weiyan/ tar jxf /new_disk/weiyan/linux-2.6.25.tar.bz2 cd linux-2.6.25
2) 修改体系架构并指定交叉编译器 vi Makefile ,将193行和194行的 #ARCH ?= $(SUBARCH) #CROSS_COMPILE ?= 修改为 ARCH ?= arm CROSS_COMPILE ?= arm-linux- #最后有“—”,Makefile会调用arm-linux-gcc
3) 载入默认配置 make s3c2410_defconfig make menuconfig 按Esc键保存退出。
4) 添加生成U-Boot镜像的工具 cp /new_disk/weiyan/mkimage ./ vi scripts/mkuboot.sh ,将 MKIMAGE=$(type -path "${CROSS_COMPILE}mkimage") 修改为MKIMAGE=$PWD/mkimage
vi arch/arm/mach-s3c2440/mach-smdk2440.c 5) 添加nand划分信息 static struct mtd_partition wy_nand_part[] = { [0] = { //u-boot及内存存放的分区 .name = "BOOT", .size = SZ_2M, .offset = 0, }, [1] = { //文件系统存放的分区 .name = "ROOTFS", .offset = SZ_2M, .size = SZ_32M, }, [2] = { //剩余空间 .name = "BACKUP", .offset = SZ_32M + SZ_2M, .size = SZ_32M - SZ_2M, }, }; static struct s3c2410_nand_set wy_nand_sets[] = { [0] = { .name = "NAND", .nr_chips = 1, .nr_partitions = ARRAY_SIZE(wy_nand_part),
6) 添加nand flash的读写匹配时间,各时间定义如图 static struct s3c2410_platform_nand wy_nand_info = { .tacls = 10, .twrph0 = 25, .twrph1 = 10, .nr_sets = ARRAY_SIZE(wy_nand_sets), .sets = wy_nand_sets, };
.partitions = wy_nand_part, }, };
7) 添加支持硬件校验: make menuconfig Device Drivers ---> <*> Memory Technology Device (MTD) support ---> <*> NAND Device Support ---> S3C2410 NAND Hardware ECC
8) 编译并拷贝到tftp下载目录 make uImage …… Image Name: Linux-2.6.25 Created: Mon Apr 7 13:50:19 2008 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 1591184 Bytes = 1553.89 kB = 1.52 MB Load Address: 0x30008000 Entry Point: 0x30008000 Image arch/arm/boot/uImage is ready
启动新内核:
dm9000 i/o: 0x18000300, id: 0x90000a46 MAC: 00:0c:20:02:0a:5b TFTP from server 192.168.1.5; our IP address is 192.168.1.6 Filename 'uImage'. Load address: 0x31000000 Loading: ################################################################# ############################################# done Bytes transferred = 1591268 (1847e4 hex) ## Booting image at 31000000 ... Image Name: Linux-2.6.25 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 1591204 Bytes = 1.5 MB Load Address: 30008000 Entry Point: 30008000 Verifying Checksum ... OK OK Starting kernel ... Uncompressing Linux....................................................................................................... done, booting the kernel. Linux version 2.6.25 (root@ubuntu-server) (gcc version 3.4.1) #4 Mon Apr 21 04:28:37 CST 2008 CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177 Machine: SMDK2440 Memory policy: ECC disabled, Data cache writeback CPU S3C2440A (id 0x32440001) S3C244X: core 406.425 MHz, memory 135.475 MHz, peripheral 67.737 MHz S3C24XX Clocks, (c) 2004 Simtec Electronics CLOCK: Slow mode (2.116 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: 16256 Kernel command line: root=/dev/mtdblock1 rootfstype=jffs2 console=ttySAC0 ip=192.168.1.6:192.168.1.5:192.168.1.5:255.255.255.0:WEIYAN:eth0:off ……. S3C24XX NAND Driver, (c) 2004 Simtec Electronics s3c2440-nand s3c2440-nand: Tacls=2, 14ns Twrph0=4 29ns, Twrph1=2 14ns NAND device: Manufacturer ID: 0xec, Chip ID: 0x76 (Samsung NAND 64MiB 3,3V 8-bit) Scanning device for bad blocks Creating 3 MTD partitions on "NAND 64MiB 3,3V 8-bit": 0x00000000-0x00200000 : "BOOT" 0x00200000-0x02200000 : "ROOTFS" 0x02200000-0x04000000 : "BACKUP" …… Empty flash at 0x0096200c ends at 0x00962200 Empty flash at 0x01470628 ends at 0x01470800 jffs2_scan_eraseblock(): Node at 0x01470dfc {0x1985, 0xe001, 0xe0021985) has invalid CRC 0x00000044 (calculated 0x515918d5) VFS: Mounted root (jffs2 filesystem). Freeing init memory: 140K JFFS2 notice: (775) check_node_data: wrong data CRC in data node at 0x01470578: read 0x5cc80399, calculated 0x36a47240. init started: BusyBox v1.9.1 (2008-04-19 19:49:32 CST) starting pid 777, tty '': '/etc/init.d/rcS' starting initial script, WEIYAN Please press Enter to activate this console. starting pid 795, tty '': '/bin/sh' [root@WEIYAN /]$ ls bin etc linuxrc opt sbin tmp var dev lib mnt proc sys usr [root@WEIYAN /]$ |