本文共 8349 字,大约阅读时间需要 27 分钟。
这里仅仅是移植成功内核,可以挂载文件系统运行,至于驱动会陆续添加。
第一步:到上下载最新的内核,我下载的是linux-3.3-rc3.tar.bz2。
第二步:解压内核,进入arch/arm/mach-s3c64xx目录下,看到不少6410的板级文件,我们这里选择mini6410开开展工作,在目录下将mach-mini6410.c文件复制一份,命名为:mach-jfj6410.c。这里我们将文件里面关于mini6410的字样都修改为jfj6410.但是这里要注意,MACHINE_START(JFJ6410, "JFJ6410")这里的JFJ6410要使用大写,稍候说明为什么。大家都知道在一个目录下添加了文件后,都应该修改当前目录下的Kconfig和Makefile两个文件,这是Linux系统编译的要求。至于怎么修改,仔细看一下文件内容我相信大家都知道。
Kconfig文件是进行make menuconfig时出现的配置选项,这里我们添加了自己的板级文件肯定要添加配置选项。内容可以复制MINI6410的。如下:
config MACH_JFJ6410 bool "JFJ6410" select CPU_S3C6410 select S3C_DEV_HSMMC select S3C_DEV_HSMMC1 select S3C64XX_SETUP_SDHCI select S3C_DEV_USB_HOST select S3C_DEV_NAND select S3C_DEV_FB select S3C64XX_SETUP_FB_24BPP select SAMSUNG_DEV_ADC select SAMSUNG_DEV_TS help Machine support for the JFJKJ JFJ6410这里你应该能够看出之前为什么要在那个地方单独使用大写了吧,就是为了保持一致。
Makefile文件就是说明要编译的文件,以及编译的规则,这里显然就是要编译我们自己的板级文件mach-jfj6410.c,具体如下:
obj-$(CONFIG_MACH_JFJ6410) += mach-jfj6410.o第三步:配置内核,make menuconfig。这里我是使用内核自带的s3c6400_defconfig文件进行修改的,这样比较简单,呵呵。基本去掉了大部分的驱动,留下了串口驱动和NAND驱动。
第四步:编译make zImage。呵呵,这样就生成了我们需要的内核。
第五步:烧写,测试内核。因为我们是测试内核,所以U-Boot以及根文件系统都是使用之前的,这里没有移植yaffs,所以我目前使用cramfs格式的文件系统。
启动开发板后出现了如下的错误:
end_request: I/O error, dev mtdblock2, sector 0FAT: unable to read boot sectorVFS: Cannot open root device "mtdblock2" or unknown-block(31,2)Please append a correct "root=" boot option; here are the available partitions:1f00 192 mtdblock0 (driver?)1f01 1856 mtdblock1 (driver?)1f02 30720 mtdblock2 (driver?)1f03 32768 mtdblock3 (driver?)Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,2)后来上网查了很久才发现是驱动的问题。U-boot使用软件ECC,我们在配置NAND驱动的时候提示是否选择使用NAND硬件ECC,我试了一下,无论你选不选都出现这个问题,我才发现,它的配置包含三重含义,选中--->使用硬件ECC;不选--->使用NAND的软件ECC(和U-Boot的软件ECC不是一回事);而我们这里需要的是不使用NAND的ECC,也就是禁止,不然就会和U-Boot冲突,出现上面的错误。要禁止NAND的ECC,我们修改drivers/mtd/nand/s3c2410.c这个文件,在845行的地方。
源代码为:
chip->ecc.mode = NAND_ECC_SOFT;修改为:
chip->ecc.mode = NAND_ECC_NONE;这就是当我们不选中的时候,不是使用NAND的软件ECC,而是不使用NAND的ECC。
再次编译内核,烧写后正常运行,打印的信息如下:
Starting kernel ...Uncompressing Linux... done, booting the kernel.Booting Linux on physical CPU 0Linux version 3.3.0-rc3 (chenlong12580@chenlong12580) (gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72) ) #4 Mon Feb 13 14:58:00 CST 2012CPU: ARMv6-compatible processor [410fb766] revision 6 (ARMv7), cr=00c5387dCPU: PIPT / VIPT nonaliasing data cache, VIPT nonaliasing instruction cacheMachine: JFJ6410Memory policy: ECC disabled, Data cache writebackCPU S3C6410 (id 0x36410101)S3C24XX Clocks, Copyright 2004 Simtec Electronicscamera: no parent clock specifiedS3C64XX: PLL settings, A=532000000, M=532000000, E=24000000S3C64XX: HCLK2=266000000, HCLK=133000000, PCLK=66500000mout_apll: source is fout_apll (1), rate is 532000000mout_epll: source is epll (1), rate is 24000000mout_mpll: source is mpll (1), rate is 532000000usb-bus-host: source is clk_48m (0), rate is 48000000audio-bus: source is mout_epll (0), rate is 24000000audio-bus: source is mout_epll (0), rate is 24000000audio-bus: source is mout_epll (0), rate is 24000000irda-bus: source is mout_epll (0), rate is 24000000camera: no parent clock specifiedCPU: found DTCM0 8k @ 00000000, not enabledCPU: moved DTCM0 8k to fffe8000, enabledCPU: found DTCM1 8k @ 00000000, not enabledCPU: moved DTCM1 8k to fffea000, enabledCPU: found ITCM0 8k @ 00000000, not enabledCPU: moved ITCM0 8k to fffe0000, enabledCPU: found ITCM1 8k @ 00000000, not enabledCPU: moved ITCM1 8k to fffe2000, enabledBuilt 1 zonelists in Zone order, mobility grouping on. Total pages: 65024Kernel command line: root=/dev/mtdblock2 rootfstype=cramfs console=ttySAC0,115200PID hash table entries: 1024 (order: 0, 4096 bytes)Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)Memory: 256MB = 256MB totalMemory: 257500k/257500k available, 4644k reserved, 0K highmemVirtual kernel memory layout: vector : 0xffff0000 - 0xffff1000 ( 4 kB) DTCM : 0xfffe8000 - 0xfffec000 ( 16 kB) ITCM : 0xfffe0000 - 0xfffe4000 ( 16 kB) fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB) vmalloc : 0xd0800000 - 0xff000000 ( 744 MB) lowmem : 0xc0000000 - 0xd0000000 ( 256 MB) modules : 0xbf000000 - 0xc0000000 ( 16 MB) .text : 0xc0008000 - 0xc01d90b8 (1861 kB) .init : 0xc01da000 - 0xc01f5000 ( 108 kB) .data : 0xc01f6000 - 0xc0216a40 ( 131 kB) .bss : 0xc0217024 - 0xc0246c58 ( 192 kB)SLUB: Genslabs=13, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1NR_IRQS:246VIC @f6000000: id 0x00041192, vendor 0x41VIC @f6010000: id 0x00041192, vendor 0x41Console: colour dummy device 80x30Calibrating delay loop... 528.79 BogoMIPS (lpj=2643968)pid_max: default: 32768 minimum: 301Mount-cache hash table entries: 512CPU: Testing write buffer coherency: okSetting up static identity map for 0x5015e320 - 0x5015e37cgpiochip_add: registered GPIOs 38 to 53 on device: GPFgpiochip_add: registered GPIOs 74 to 89 on device: GPIgpiochip_add: registered GPIOs 91 to 102 on device: GPJgpiochip_add: registered GPIOs 161 to 176 on device: GPOgpiochip_add: registered GPIOs 178 to 192 on device: GPPgpiochip_add: registered GPIOs 194 to 202 on device: GPQgpiochip_add: registered GPIOs 144 to 159 on device: GPNgpiochip_add: registered GPIOs 0 to 7 on device: GPAgpiochip_add: registered GPIOs 9 to 15 on device: GPBgpiochip_add: registered GPIOs 17 to 24 on device: GPCgpiochip_add: registered GPIOs 26 to 30 on device: GPDgpiochip_add: registered GPIOs 32 to 36 on device: GPEgpiochip_add: registered GPIOs 55 to 61 on device: GPGgpiochip_add: registered GPIOs 137 to 142 on device: GPMgpiochip_add: registered GPIOs 63 to 72 on device: GPHgpiochip_add: registered GPIOs 104 to 119 on device: GPKgpiochip_add: registered GPIOs 121 to 135 on device: GPLjfj6410: Option string jfj6410=0jfj6410: selected LCD display is 480x272S3C6410: Initialising architecturebio: create slab驱动的添加,敬请期待。。。。at 0io scheduler noop registeredio scheduler deadline registeredio scheduler cfq registered (default)start plist testend plist testSerial: 8250/16550 driver, 4 ports, IRQ sharing disableds3c6400-uart.0: ttySAC0 at MMIO 0x7f005000 (irq = 69) is a S3C6400/10console [ttySAC0] enableds3c6400-uart.1: ttySAC1 at MMIO 0x7f005400 (irq = 70) is a S3C6400/10s3c6400-uart.2: ttySAC2 at MMIO 0x7f005800 (irq = 71) is a S3C6400/10s3c6400-uart.3: ttySAC3 at MMIO 0x7f005c00 (irq = 72) is a S3C6400/10brd: module loadedloop: module loadedS3C24XX NAND Driver, (c) 2004 Simtec Electronicss3c24xx-nand s3c6400-nand: Tacls=4, 30ns Twrph0=8 60ns, Twrph1=6 45nss3c24xx-nand s3c6400-nand: System booted from NANDs3c24xx-nand s3c6400-nand: NAND ECC disabledNAND device: Manufacturer ID: 0xec, Chip ID: 0xda (Samsung NAND 256MiB 3,3V 8-bit)NAND_ECC_NONE selected by board driver. This is not recommended!Scanning device for bad blocksBad eraseblock 1050 at 0x000008340000Bad eraseblock 1076 at 0x000008680000Bad eraseblock 1211 at 0x000009760000Bad eraseblock 1949 at 0x00000f3a0000Creating 4 MTD partitions on "nand":0x000000000000-0x000000100000 : "Bootloader"0x000000100000-0x000000600000 : "Kernel"0x000000600000-0x000007e00000 : "User"0x000007e00000-0x000010000000 : "File System"mousedev: PS/2 mouse device common for all miceVFP support v0.3: implementor 41 architecture 1 part 20 variant b rev 5VFS: Mounted root (cramfs filesystem) readonly on device 31:2.Freeing init memory: 108Kmount: mounting none on /proc/bus/usb failed: No such file or directoryhwclock: can't open '/dev/misc/rtc': No such file or directorydepmod: chdir(3.3.0-rc3): No such file or directory[01/Jan/1970:00:00:07 +0000] boa.c:173 - unable to create socket: Function not implemented open device leds: No such file or directory/usr/sbin/alsactl: load_state:1610: No soundcards found... ifconfig: socket: Function not implementedTry to bring eth0 interface up......cat: can't open '/sys/class/net/eth0/address': No such file or directoryifconfig: socket: Function not implementedroute: socket: Function not implemented/etc/init.d/ifconfig-eth0: line 6: can't create /etc/resolv.conf: Read-only file systemDonePlease press Enter to activate this console. [root@JFJ6410 /]# lsbin etc lib mnt proc sbin tmp vardev home linuxrc opt root sys usr www[root@JFJ6410 /]#
转载地址:http://ovqab.baihongyu.com/