博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux 3.3.0移植到S3C6410开发板上之一
阅读量:2392 次
发布时间:2019-05-10

本文共 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/

你可能感兴趣的文章
Java代码实现设置系统时间
查看>>
java -D参数简化加入多个jar
查看>>
用Erlang开发的文档数据库系统CouchDB
查看>>
Apache Commons工具集简介
查看>>
Apache Cayenne—辣椒你吃了吗?
查看>>
云应用开发工具:Spring Cloud 1.0 正式发布
查看>>
[转]在VC中使用智能指针操作Excel
查看>>
关于Linux命令行环境下无线网卡的配置
查看>>
C++的朋友,你都在用什么连数据库啊
查看>>
Setup Kubernetes on a Raspberry Pi Cluster easily the official way!
查看>>
Installing Kubernetes on Linux with kubeadm
查看>>
k8s-Building Large Clusters
查看>>
[转]stl 通用排序算法解析
查看>>
分布式存储系统GlusterFS初体验
查看>>
GlusterFS常用命令小结
查看>>
GlusterFS分布式文件系统使用简介
查看>>
Use Docker Engine plugins
查看>>
Using Gluster for a Distributed Docker Storage Volume
查看>>
有容云老司机带路, 使用Docker实现丝般顺滑的持续集成
查看>>
如何让Ubuntu系统支持WebP图片格式
查看>>