Linux 3.3.0移植到S3C6410開發板上之一

來源:互聯網
上載者:User

     這裡僅僅是移植成功核心,可以掛載檔案系統運行,至於驅動會陸續添加。

     第一步:到核心官網上下載最新的核心,我下載的是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_JFJ6410bool "JFJ6410"select CPU_S3C6410select S3C_DEV_HSMMCselect S3C_DEV_HSMMC1select S3C64XX_SETUP_SDHCIselect S3C_DEV_USB_HOSTselect S3C_DEV_NANDselect S3C_DEV_FBselect S3C64XX_SETUP_FB_24BPPselect SAMSUNG_DEV_ADCselect SAMSUNG_DEV_TShelp  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 <bio-0> 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 /]# 

               驅動的添加,敬請期待。。。。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.