歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

QT6410移植Linux-2.6.39 筆記

1、Hosting environment:VMare Ubuntu10.04 

2、Cross-compiling environment:arm-2009q3.tar.bz2

3、Development board:QT6410

4、nanflash:K9F2G08(256M)

5、linux -version:Linux-2.6.39

6、uboot-version:u-boot-2010.06

一、下載並解壓內核源碼

a)在命令行終端中可以通過下列方式下載,當然用其它下載工具下載

root@bootloader:/home/eilian/development/Android#cd ../Linux

root@bootloader:/home/eilian/development/Linux# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.39.tar.gz

b)解壓源碼

root@bootloader:/home/eilian/development/Linux#
root@bootloader:/home/eilian/development/Linux# tar zxvf linux-2.6.39.tar.gz
root@bootloader:/home/eilian/development/Linux# ls
linux-2.6.32.2         linux-2.6.39        
linux-2.6.36.2         linux-2.6.39.tar.bz2
linux-2.6.36.2.tar.gz  linux-2.6.39.tar.gz
root@bootloader:/home/eilian/development/Linux# cd linux-2.6.39
root@bootloader:/home/eilian/development/Linux/linux-2.6.39# 

c)指定交叉編譯器

移植目的讓 Linux-2.6.39 可以在QT6410 上運行。首先,使得Linux-2.6.39的缺省目標平台成為ARM 的平台,修改主目錄下的Makefile。

用vi打開Makefile,定位到196行,修改如下:

root@bootloader:/home/eilian/development/Linux/linux-2.6.39# vi Makefile

# Default value for CROSS_COMPILE is not to prefix executables
# Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile
export KBUILD_BUILDHOST := $(SUBARCH)
ARCH        ?= arm
CROSS_COMPILE    ?= arm-linux-

# Architecture as present in compile.h
UTS_MACHINE     := $(ARCH)
SRCARCH     := $(ARCH)

修改完成後退出保存

二、創建目標平台

從smdk6410到qt6410

root@bootloader:/home/eilian/development/Linux/linux-2.6.39#cd arch/arm/mach-s3c64xx

root@bootloader:/home/eilian/development/Linux/linux-2.6.39/arch/arm/mach-s3c64xx#cp mach-smdk6410.c mach-qt6410.c

將mach-mach-qt6410.c文件中的所有smdk6410改成qt6410

root@bootloader:/home/eilian/development/Linux/linux-2.6.39/arch/arm/mach-s3c64xx#vi mach-qt6410.c

   

修改mach-s3c64xx目錄下的Makefile和Kconfig 修改如下:

Kconfig:添加如下紅色代碼

config MACH_SMDK6410
    bool "SMDK6410"
    select CPU_S3C6410
    select SAMSUNG_DEV_ADC
    select S3C_DEV_HSMMC
    select S3C_DEV_HSMMC1
    select S3C_DEV_I2C1
    select SAMSUNG_DEV_IDE
    select S3C_DEV_FB
    select S3C_DEV_RTC
    select SAMSUNG_DEV_TS
    select S3C_DEV_USB_HOST
    select S3C_DEV_USB_HSOTG
    select S3C_DEV_WDT
    select SAMSUNG_DEV_KEYPAD
    select SAMSUNG_DEV_PWM
    select HAVE_S3C2410_WATCHDOG if WATCHDOG
    select S3C64XX_SETUP_SDHCI
    select S3C64XX_SETUP_I2C1
    select S3C64XX_SETUP_IDE
    select S3C64XX_SETUP_FB_24BPP
    select S3C64XX_SETUP_KEYPAD
    help
      Machine support for the Samsung SMDK6410
      
config MACH_QT6410
    bool "QT6410"
    select CPU_S3C6410
    select SAMSUNG_DEV_ADC
    select S3C_DEV_HSMMC
    select S3C_DEV_HSMMC1
    select S3C_DEV_I2C1
    select SAMSUNG_DEV_IDE
    select S3C_DEV_FB
    select S3C_DEV_RTC
    select SAMSUNG_DEV_TS
    select S3C_DEV_USB_HOST
    select S3C_DEV_USB_HSOTG
    select S3C_DEV_WDT
    select SAMSUNG_DEV_KEYPAD
    select SAMSUNG_DEV_PWM
    select HAVE_S3C2410_WATCHDOG if WATCHDOG
    select S3C64XX_SETUP_SDHCI
    select S3C64XX_SETUP_I2C1
    select S3C64XX_SETUP_IDE
    select S3C64XX_SETUP_FB_24BPP
    select S3C64XX_SETUP_KEYPAD
    help
      Machine support for the Samsung QT6410
Makefile:添加如下紅色代碼

obj-$(CONFIG_MACH_ANW6410)    += mach-anw6410.o
obj-$(CONFIG_MACH_SMDK6400)    += mach-smdk6400.o
obj-$(CONFIG_MACH_SMDK6410)    += mach-smdk6410.o
obj-$(CONFIG_MACH_QT6410)    += mach-qt6410.o
obj-$(CONFIG_MACH_REAL6410)     += mach-real6410.o
obj-$(CONFIG_MACH_MINI6410)     += mach-mini6410.o
obj-$(CONFIG_MACH_NCP)        += mach-ncp.o
obj-$(CONFIG_MACH_HMT)        += mach-hmt.o
obj-$(CONFIG_MACH_SMARTQ)    += mach-smartq.o
obj-$(CONFIG_MACH_SMARTQ5)    += mach-smartq5.o
obj-$(CONFIG_MACH_SMARTQ7)    += mach-smartq7.o


三、About machine Number

打開arch/arm/tools/mach-types文件定位到217行左右,修改如下

at91sam9g20ek        MACH_AT91SAM9G20EK    AT91SAM9G20EK        1624
qt6410        MACH_QT6410        QT6410        1626
u300            MACH_U300        U300            1627


這需要兩者相匹配,如果內核的機器碼和bootloader 傳入的不匹配,就會經常出現下面的錯誤:
Uncompressing Linux................................................................................................................................. done, booting
the kernel.             不動了

接著修改linux-2.6.39/arch/arm/mach-s3c64xx/qt6410.c定位到文件末尾處

MACHINE_START(S3C6410, "SMDK6410") , 將其修改為
MACHINE_START(QT6410, "QT6410 development board")
notes:開發板運行後,在命令行終端輸入:cat /proc/cpuinfo 可以看到我們添加的開發板信息,當然這個信息可以定制成我們需要的信息

四、配置、編譯測試

root@bootloader:/home/eilian/development/Linux/linux-2.6.39#cp arch/arm/configs/s3c6400_defconfig .config
root@bootloader:/home/eilian/development/Linux/linux-2.6.39#make menuconfig

出現下圖所示內核配置根菜單

   

 按上下箭頭鍵移動到 System Type,按回車進入該子菜單,如圖

   

設置完後退出

root@bootloader:/home/eilian/development/Linux/linux-2.6.39#make uImage

等待若干久後出現

  SYSMAP  .tmp_System.map
  OBJCOPY arch/arm/boot/Image
  Kernel: arch/arm/boot/Image is ready
  AS      arch/arm/boot/compressed/head.o
  GZIP    arch/arm/boot/compressed/piggy.gzip
  AS      arch/arm/boot/compressed/piggy.gzip.o
  CC      arch/arm/boot/compressed/misc.o
  CC      arch/arm/boot/compressed/decompress.o
  SHIPPED arch/arm/boot/compressed/lib1funcs.S
  AS      arch/arm/boot/compressed/lib1funcs.o
  LD      arch/arm/boot/compressed/vmlinux
  OBJCOPY arch/arm/boot/zImage
  Kernel: arch/arm/boot/zImage is ready
  UIMAGE  arch/arm/boot/uImage
Image Name:   Linux-2.6.39
Created:      Mon Dec 12 20:29:35 2011
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    1266444 Bytes = 1236.76 kB = 1.21 MB
Load Address: 50008000
Entry Point:  50008000
  Image arch/arm/boot/uImage is ready

root@bootloader:/home/eilian/development/Linux/linux-2.6.39#cparch/arm/boot/uImage /tftpboot/

給開發板上電(開發板已燒入uboot)打開超級終端


U-Boot 2010.06 (Dec 12 2011 - 18:39:28) for QT6410
**********************************************
**    u-boot-2010.06                     
**    Updated for QT6410 Board         
**    Version 1.0 (11-12-15)           
**    Author: eilian                   
**    blog: http://blog.csdn.net/eilianlau
**    E-mail: [email protected]         
**********************************************
CPU:     S3C6410@667MHz
         Fclk = 667MHz, Hclk = 133MHz, Pclk = 66MHz (ASYNC Mode)
Board:   QT6410
DRAM:  128 MiB
NAND:  256 MiB
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Net:   dm9000
Hit any key to stop autoboot:  0
QT6410# tftp 50018000 uImage
dm9000 i/o: 0x18000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 00:40:5c:26:0a:5b
operating at unknown: 15 mode
Using dm9000 device
TFTP from server 211.67.217.136; our IP address is 211.67.217.138
Filename 'uImage'.
Load address: 0x50018000
Loading: T #################################################################
         #################################################################
         #################################################################
         #####################################################
done
Bytes transferred = 1266508 (13534c hex)
QT6410# bootm 50018000
## Booting kernel from Legacy Image at 50018000 ...
   Image Name:   Linux-2.6.39
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    1266444 Bytes = 1.2 MiB
   Load Address: 50008000
   Entry Point:  50008000
   Verifying Checksum ... OK
   Loading Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.
Linux version 2.6.39 (root@bootloader) (gcc version 4.4.1 (Sourcery G++ Lite 2009q3-67) ) #1 Mon Dec 12 20:29:17 CST 2011
CPU: ARMv6-compatible processor [410fb766] revision 6 (ARMv7), cr=00c5387f
CPU: VIPT nonaliasing data cache, VIPT nonaliasing instruction cache
Machine: QT6410 development board
Memory policy: ECC disabled, Data cache writeback
CPU S3C6410 (id 0x36410101)
S3C24XX Clocks, Copyright 2004 Simtec Electronics
camera: no parent clock specified
S3C64XX: PLL settings, A=667000000, M=533000000, E=24000000
S3C64XX: HCLK2=266500000, HCLK=133250000, PCLK=66625000
mout_apll: source is fout_apll (1), rate is 667000000
mout_epll: source is epll (1), rate is 24000000
mout_mpll: source is mpll (1), rate is 533000000
mmc_bus: source is mout_epll (0), rate is 24000000
mmc_bus: source is mout_epll (0), rate is 24000000
mmc_bus: source is mout_epll (0), rate is 24000000
usb-bus-host: source is clk_48m (0), rate is 48000000
uclk1: source is mout_epll (0), rate is 24000000
spi-bus: source is mout_epll (0), rate is 24000000
spi-bus: source is mout_epll (0), rate is 24000000
audio-bus: source is mout_epll (0), rate is 24000000
audio-bus: source is mout_epll (0), rate is 24000000
audio-bus: source is mout_epll (0), rate is 24000000
irda-bus: source is mout_epll (0), rate is 24000000
camera: no parent clock specified
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 32512
Kernel command line: root=/dev/mtdblock2 rootfstype=yaffs2 init=/linuxrc nconsole=tty1 console=ttySAC0,115200
PID hash table entries: 512 (order: -1, 2048 bytes)
Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
Memory: 128MB = 128MB total
Memory: 127192k/127192k available, 3880k reserved, 0K highmem
Virtual kernel memory layout:
    vector  : 0xffff0000 - 0xffff1000   (   4 kB)
    fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
    DMA     : 0xff600000 - 0xffe00000   (   8 MB)
    vmalloc : 0xc8800000 - 0xf6000000   ( 728 MB)
    lowmem  : 0xc0000000 - 0xc8000000   ( 128 MB)
    modules : 0xbf000000 - 0xc0000000   (  16 MB)
      .init : 0xc0008000 - 0xc0022000   ( 104 kB)
      .text : 0xc0022000 - 0xc024dc88   (2224 kB)
      .data : 0xc024e000 - 0xc0271200   ( 141 kB)
SLUB: Genslabs=13, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
NR_IRQS:246
VIC @f6000000: id 0x00041192, vendor 0x41
VIC @f6010000: id 0x00041192, vendor 0x41
Console: colour dummy device 80x30
console [ttySAC0] enabled
Calibrating delay loop... 666.41 BogoMIPS (lpj=3332096)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
s3c64xx_dma_init: Registering DMA channels
PL080: IRQ 73, at c8808000, channels 0..8
PL080: IRQ 74, at c880c000, channels 8..16
S3C6410: Initialising architecture
bio: create slab <bio-0> at 0
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
s3c-i2c s3c2440-i2c.0: slave address 0x10
s3c-i2c s3c2440-i2c.0: bus frequency set to 65 KHz
s3c-i2c s3c2440-i2c.0: i2c-0: S3C I2C adapter
ROMFS MTD (C) 2007 Red Hat, Inc.
io scheduler noop registered
io scheduler deadline registered
io scheduler cfq registered (default)
start plist test
end plist test
s3c-fb s3c-fb: window 0: fb
Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
s3c6400-uart.0: ttySAC0 at MMIO 0x7f005000 (irq = 16) is a S3C6400/10
s3c6400-uart.1: ttySAC1 at MMIO 0x7f005400 (irq = 20) is a S3C6400/10
s3c6400-uart.2: ttySAC2 at MMIO 0x7f005800 (irq = 24) is a S3C6400/10
s3c6400-uart.3: ttySAC3 at MMIO 0x7f005c00 (irq = 28) is a S3C6400/10
brd: module loaded

Copyright © Linux教程網 All Rights Reserved