zoukankan      html  css  js  c++  java
  • u-boot-2015.01在tq2440上的初步移植

    作者: 彭东林

    邮箱: pengdonglin137@163.com

    QQ:   405728433

    开发板:     tq2440

    工具:       Win7 + VMware + Debian6

    U-boot版本: u-boot-2015.01

    Linux版本:  天嵌自带的 linux-2.6.30.4

    GCC版本:     gcc version 4.3.3 (Sourcery G++ Lite 2009q1-176)

    之前由于移植过u-boot-2014.04到tq2440上,现在移植u-boot-2015.01的时候就不说那么详细了,因为之前已经说的很详细了,现在简略移植一下。

    在移植的时候,基本上是参考移植u-boot-2014.04时写的文档,可以到这里下载:http://pan.baidu.com/s/1jGxEYQq

    首先说明一下u-boot-2015.01跟之前版本的差别

    http://ftp.denx.de/pub/u-boot/下载最新的u-boot版本,目前最新的是 u-boot-2015.01.tar.bz2

    下面是解压后得到的文件:

    image

    可以看到目录内容跟u-boot-2014.04不同了,下面是u-boot-2014.04的顶层目录内容:

    image

    其中最不同的就是我们所熟悉的在u-boot-2014.04中的boards.cfg和mkconfig没有了,而同时又在u-boot-2015.01的顶层目录下多出了一个configs目录,还有一个Kconfig文件(这不是Linux内核所特有的吗?),可以看到u-boot一直在学习Linux内核的配置和编译方法。

    在configs目录下有很多默认的配置文件:

    image

    在Linux的arch/arm/configs下面也有很多默认的配置文件,Linux内核在配置的时候可以使用 make xxx_defconfig 来配置,

    看样子,u-boot也可以使用make xxx_defconfig,Linux内核还可以使用make menuconfig来配置,u-boot也可以使用make menuconfig来配置,下面我们用smdk2410为例实验一下:

    在u-boot-2015.01的configs目录下有一个叫做smd2410_defconfig的配置文件,那么执行 make smd2410_defconfig

    image

    然后我们再执行make menuconfig试试:

    image

    果然如此。

    我们选择的是smdk2410的配置文件,在这里体现出来:

    image

    然后就可以编译了, 直接执行 make 即可,刚开始会报错:

    image

    原因是我们没有指定交叉编译工具链的名字,修改顶层的Makefile即可:

    image

    然后再执行make就可以编译成功。

    在以前的u-boot配置是总是有什么ARCH、CPU、BOARD和SOC之类的变量,同时编译完成后会在include下生成一个叫做config.mk的文件,其中对这几个变量赋值了,如:

    image

    但是在u-boot-2015.01编译完成后,在include下面却没有config.mk了,只有autoconf.mk了,那它是怎么做的呢?

    在u-boot-2015.01中执行完make smdk2410_defconfig后,会在顶层目录中生成一个.config文件,我们大致看一下其中的内容:

    image

    可以看到,在.config中还是有ARCH、CPU、SOC以及BOARD之类的配置项,在顶层目录下的config.mk中会使用.config中的配置:

    image

    在arch/Kconfig中对这几个配置进行了说明:

    config SYS_ARCH
        string
        help
          This option should contain the architecture name to build the
          appropriate arch/<CONFIG_SYS_ARCH> directory.
          All the architectures should specify this option correctly.

    config SYS_CPU
        string
        help
          This option should contain the CPU name to build the correct
          arch/<CONFIG_SYS_ARCH>/cpu/<CONFIG_SYS_CPU> directory.

          This is optional.  For those targets without the CPU directory,
          leave this option empty.

    config SYS_SOC
        string
        help
          This option should contain the SoC name to build the directory
          arch/<CONFIG_SYS_ARCH>/cpu/<CONFIG_SYS_CPU>/<CONFIG_SYS_SOC>.

          This is optional.  For those targets without the SoC directory,
          leave this option empty.

    config SYS_VENDOR
        string
        help
          This option should contain the vendor name of the target board.
          If it is set and
          board/<CONFIG_SYS_VENDOR>/common/Makefile exists, the vendor common
          directory is compiled.
          If CONFIG_SYS_BOARD is also set, the sources under
          board/<CONFIG_SYS_VENDOR>/<CONFIG_SYS_BOARD> directory are compiled.

          This is optional.  For those targets without the vendor directory,
          leave this option empty.

    config SYS_BOARD
        string
        help
          This option should contain the name of the target board.
          If it is set, either
    board/<CONFIG_SYS_VENDOR>/<CONFIG_SYS_BOARD>
          or board/<CONFIG_SYS_BOARD> directory is compiled depending on
          whether CONFIG_SYS_VENDOR is set or not.

          This is optional.  For those targets without the board directory,
          leave this option empty.

    config SYS_CONFIG_NAME
        string
        help
          This option should contain the base name of board header file.
          The header file
    include/configs/<CONFIG_SYS_CONFIG_NAME>.h
          should be included from include/config.h.

    同时在arch/Kconfig中又会加载其他目录下的Kconfig,如 source “arch/arm/Kconfig”,在arch/arm/Kconfig中又会加载board目录下的Kconfig,如 source “board/samsung/smdk2410/Kconfig”,下面我们看一下board/samsung/smdk2410/Kconfig中的内容:

    image

    不错,就是在这里对.config中的那几个配置赋了值,可以看到,第一个行用TARGET_SMDK2410进行了判断,这个在arch/arm/Kconfig中:

    image

    意思是: 如果选择的是smd2410,TARGET_SMDK2410会被选择,然后board/samsung/smdk2410/Kconfig会对CONFIG_SYS_CPU、CONFIG_SYS_SOC、CONFIG_SYS_VENDOR、CONFIG_SYS_BOARD、CONFIG_SYS_CONFIG_NAME赋值:

    image
    先说到这里吧。

    下面开始移植tq2440

    参考u-boot-2014.04移植手册(TQ2440).pdf文档

    1. 清理一下刚才编译的垃圾

       make distclean

    2. 拷贝

    •    cp -a board/samsung/smdk2410/ board/tq2440
    •    cd board/tq2440
    •    mv smdk2410.c tq2440.c
    •    修改board/tq2440/Makefile

       image

    •    修改board/tq2440/Kconfig

    image

    •    修改arch/arm/Kconfig, 添加smdk2440的配置项

    image

    •    修改arch/arm/Kconfig, 加载board/tq2440/Kconfig

    image

     

    •    拷贝配置文件include/configs/smdk2410.h为include/configs/tq2440.h:

             cp include/configs/smdk2410.h include/configs/tq2440.h

    •    拷贝默认配置文件

             cp configs/smdk2410_defconfig configs/tq2440_defconfig

    •    修改configs/tq2440_defconfig, 在配置时我们就可以使用 make tq2440_defconfig了。

    image

       将include/configs/tq2440.h中的smdk2410的信息注释掉,注意不能使用 // 这种注释方法,而必须使用 #if … #endif 或者 /**/,否则在编译链接时会出错,可能是u-boot的一个bug。

      下面的内容就不说了,需要注意的是由于定义了宏CONFIG_SYS_GENERIC_BOARD,代码运行的过程跟以前有所不同,如在arch/arm/lib/crt0.S中的board_init_f和board_init_r分别调用的是common/board_f.c中的board_init_f和common/board_r.c中的board_init_r。

    下面是patch的下载地址,目前仅支持norflash和dm9000,还不支持nandflash等(可以参考u-boot-2014.04移植手册完成)。

    http://pan.baidu.com/s/1pJyqcMf

    通过将天嵌自带的内核uImage通过tftp下载到内存的0x30008000地址处,然后设置bootargs为"noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0",然后设置machid为a8,使用bootm 0x30008000可以正确的启动内核:

    U-Boot 2015.01-gbfc9037-dirty (Jan 31 2015 - 18:49:33)

    CPUID: 32440001
    FCLK:      400 MHz
    HCLK:      100 MHz
    PCLK:       50 MHz
    DRAM:  64 MiB
    WARNING: Caches not enabled
    Flash: 2 MiB
    In:    serial
    Out:   serial
    Err:   serial
    Net:   dm9000
    TQ2440 # setenv bootargs 'noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0'
    TQ2440 # tftp 0x30008000 uImage
    dm9000 i/o: 0x20000000, id: 0x90000a46
    DM9000: running in 16 bit mode
    MAC: 00:11:22:33:44:55
    could not establish link
    Using dm9000 device
    TFTP from server 192.168.1.8; our IP address is 192.168.1.6
    Filename 'uImage'.
    Load address: 0x30008000
    Loading: #################################################################
             #################################################################
             ###################################
             1.5 MiB/s
    done
    Bytes transferred = 2415820 (24dccc hex)
    TQ2440 # bootm 0x30008000
    ## Booting kernel from Legacy Image at 30008000 ...
       Image Name:   Linux-2.6.30.4-EmbedSky
       Created:      2015-01-31  11:08:47 UTC
       Image Type:   ARM Linux Kernel Image (uncompressed)
       Data Size:    2415756 Bytes = 2.3 MiB
       Load Address: 30008000
       Entry Point:  30008000
       Verifying Checksum ... OK
       Loading Kernel Image ... OK
    Using machid 0xa8 from environment

    Starting kernel ...

    Uncompressing Linux................................................................................................................................................................ done, booting the kernel.
    Linux version 2.6.30.4-EmbedSky (pengdl@debian) (gcc version 4.3.3 (Sourcery G++ Lite 2009q1-176) ) #1 Sat Jan 31 19:08:25 CST 2015
    CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
    CPU: VIVT data cache, VIVT instruction cache
    Machine: TQ2440
    Memory policy: ECC disabled, Data cache writeback
    CPU S3C2440A (id 0x32440001)
    S3C24XX Clocks, (c) 2004 Simtec Electronics
    S3C244X: core 400.000 MHz, memory 100.000 MHz, peripheral 50.000 MHz
    CLOCK: Slow mode (1.500 MHz), fast, MPLL on, UPLL on
    Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 16256
    Kernel command line: noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0
    NR_IRQS:85
    irq: clearing pending ext status 00080000
    irq: clearing subpending status 00000003
    irq: clearing subpending status 00000002
    PID hash table entries: 256 (order: 8, 1024 bytes)
    Console: colour dummy device 80x30
    console [ttySAC0] enabled
    Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
    Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
    Memory: 64MB = 64MB total
    Memory: 59664KB available (4512K code, 454K data, 240K init, 0K highmem)
    SLUB: Genslabs=11, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
    Calibrating delay loop... 199.47 BogoMIPS (lpj=498688)
    Mount-cache hash table entries: 512
    CPU: Testing write buffer coherency: ok
    net_namespace: 296 bytes
    NET: Registered protocol family 16
    S3C2440: Initialising architecture
    S3C2440: IRQ Support
    S3C24XX DMA Driver, (c) 2003-2004,2006 Simtec Electronics
    DMA channel 0 at c4808000, irq 33
    DMA channel 1 at c4808040, irq 34
    DMA channel 2 at c4808080, irq 35
    DMA channel 3 at c48080c0, irq 36
    S3C244X: Clock Support, DVS off
    bio: create slab <bio-0> at 0
    SCSI subsystem initialized
    usbcore: registered new interface driver usbfs
    usbcore: registered new interface driver hub
    usbcore: registered new device driver usb
    s3c2440-i2c s3c2440-i2c: slave address 0x10
    s3c2440-i2c s3c2440-i2c: bus frequency set to 97 KHz
    s3c2440-i2c s3c2440-i2c: i2c-0: S3C I2C adapter
    cfg80211: Calling CRDA to update world regulatory domain
    NET: Registered protocol family 2
    IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
    TCP established hash table entries: 2048 (order: 2, 16384 bytes)
    TCP bind hash table entries: 2048 (order: 1, 8192 bytes)
    TCP: Hash tables configured (established 2048 bind 2048)
    TCP reno registered
    NET: Registered protocol family 1
    yaffs Jan 31 2015 19:04:20 Installing.
    msgmni has been set to 116
    alg: No test for stdrng (krng)
    io scheduler noop registered (default)
    Console: switching to colour frame buffer device 60x17
    fb0: s3c2410fb frame buffer device
    bkl initialized
    led initialized
    beep initialized
    adc initialized
    s3c2440-uart.0: ttySAC0 at MMIO 0x50000000 (irq = 70) is a S3C2440
    s3c2440-uart.1: ttySAC1 at MMIO 0x50004000 (irq = 73) is a S3C2440
    s3c2440-uart.2: ttySAC2 at MMIO 0x50008000 (irq = 76) is a S3C2440
    loop: module loaded
    Driver 'sd' needs updating - please use bus_type methods
    PPP generic driver version 2.4.2
    PPP Deflate Compression module registered
    PPP BSD Compression module registered
    PPP MPPE Compression module registered
    NET: Registered protocol family 24
    PPPoL2TP kernel driver, V1.0
    dm9000 Ethernet Driver, V1.31
    dm9000_set_io byte_width 4
    dm9000_set_io byte_width 2
    dm9000 revision 0x01  io_mode 00
    Now use the default MAC address: 10:23:45:67:89:ab
    eth0 (dm9000): not using net_device_ops yet
    eth0: dm9000e at c4818000,c481c004 IRQ 51 MAC: 10:23:45:67:89:ab (EmbedSky)
    S3C24XX NAND Driver, (c) 2004 Simtec Electronics
    s3c2440-nand s3c2440-nand: Tacls=2, 20ns Twrph0=3 30ns, Twrph1=2 20ns
    NAND 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 blocks
    Creating 3 MTD partitions on "NAND 256MiB 3,3V 8-bit":
    0x000000000000-0x000000040000 : "EmbedSky_Board_uboot"
    0x000000200000-0x000000500000 : "EmbedSky_Board_kernel"
    0x000000500000-0x000010000000 : "EmbedSky_Board_yaffs2"
    ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
    s3c2410-ohci s3c2410-ohci: S3C24XX OHCI
    s3c2410-ohci s3c2410-ohci: new USB bus registered, assigned bus number 1
    s3c2410-ohci s3c2410-ohci: irq 42, io mem 0x49000000
    usb usb1: New USB device found, idVendor=1d6b, idProduct=0001
    usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
    usb usb1: Product: S3C24XX OHCI
    usb usb1: Manufacturer: Linux 2.6.30.4-EmbedSky ohci_hcd
    usb usb1: SerialNumber: s3c24xx
    usb usb1: configuration #1 chosen from 1 choice
    hub 1-0:1.0: USB hub found
    hub 1-0:1.0: 2 ports detected
    Initializing USB Mass Storage driver...
    usbcore: registered new interface driver usb-storage
    USB Mass Storage support registered.
    usbcore: registered new interface driver usbserial
    usbserial: USB Serial Driver core
    USB Serial support registered for pl2303
    usbcore: registered new interface driver pl2303
    pl2303: Prolific PL2303 USB to serial adaptor driver
    s3c2410_udc: debugfs dir creation failed -19
    s3c2440-usbgadget s3c2440-usbgadget: S3C2440: increasing FIFO to 128 bytes
    mice: PS/2 mouse device common for all mice
    input: tq2440-keys as /devices/platform/tq2440-keys/input/input0
    TQ2440 TouchScreen successfully loaded
    input: TQ2440 TouchScreen as /devices/virtual/input/input1
    S3C24XX RTC, (c) 2004,2006 Simtec Electronics
    s3c2410-rtc s3c2410-rtc: rtc disabled, re-enabling
    s3c2410-rtc s3c2410-rtc: rtc core: registered s3c as rtc0
    i2c /dev entries driver
    Linux video capture interface: v2.00
    initializing s3c2440 camera interface......
    s3c2440 camif init done
    Loading cam-dev driver.........
    ov9650 address 0x60, manufacture ID 0xFFFF, expect 0x7FA2
    SAA7113 address 0x4A, manufacture 0xFF, expect 0x11
    unreconize id found!show ID
    ov9650 address 0x60, product ID 0xFF, expect 0x7FA2
    ov9650 init done!
    version=1
    cx231xx v4l2 driver loaded.
    usbcore: registered new interface driver cx231xx
    usbcore: registered new interface driver usbvision
    USBVision USB Video Device Driver for Linux : 0.9.10
    usbcore: registered new interface driver ov511
    ov511: v1.64 for Linux 2.5:ov511 USB Camera Driver
    SE401 usb camera driver version 0.24 registering
    usbcore: registered new interface driver se401
    usbcore: registered new interface driver stv680
    stv680 [usb_stv680_init:1550]
    STV(i): usb camera driver version v0.25 registering<6>stv680: v0.25:STV0680 USB Camera Driver
    w9968cf: V4L driver for W996[87]CF JPEG USB Dual Mode Camera Chip 1:1.34-basic
    usbcore: registered new interface driver w9968cf
    usbcore: registered new interface driver zr364xx
    zr364xx: Zoran 364xx
    usbcore: registered new interface driver stkwebcam
    sn9c102: V4L2 driver for SN9C1xx PC Camera Controllers v1:1.47pre49
    usbcore: registered new interface driver sn9c102
    et61x251: V4L2 driver for ET61X[12]51 PC Camera Controllers v1:1.09
    usbcore: registered new interface driver et61x251
    pwc: Philips webcam module version 10.0.13 loaded.
    pwc: Supports Philips PCA645/646, PCVC675/680/690, PCVC720[40]/730/740/750 & PCVC830/840.
    pwc: Also supports the Askey VC010, various Logitech Quickcams, Samsung MPC-C10 and MPC-C30,
    pwc: the Creative WebCam 5 & Pro Ex, SOTEC Afina Eye and Visionite VCS-UC300 and VCS-UM100.
    usbcore: registered new interface driver Philips webcam
    zc0301: V4L2 driver for ZC0301[P] Image Processor and Control Chip v1:1.10
    usbcore: registered new interface driver zc0301
    gspca: main v2.5.0 registered
    usbcore: registered new interface driver conex
    conex: registered
    usbcore: registered new interface driver etoms
    etoms: registered
    usbcore: registered new interface driver finepix
    finepix: registered
    usbcore: registered new interface driver mars
    mars: registered
    usbcore: registered new interface driver mr97310a
    mr97310a: registered
    usbcore: registered new interface driver ov519
    ov519: registered
    usbcore: registered new interface driver ov534
    ov534: registered
    usbcore: registered new interface driver pac207
    pac207: registered
    usbcore: registered new interface driver pac7311
    pac7311: registered
    usbcore: registered new interface driver sonixb
    sonixb: registered
    usbcore: registered new interface driver sonixj
    sonixj: registered
    usbcore: registered new interface driver spca500
    spca500: registered
    usbcore: registered new interface driver spca501
    spca501: registered
    usbcore: registered new interface driver spca505
    spca505: registered
    usbcore: registered new interface driver spca506
    spca506: registered
    usbcore: registered new interface driver spca508
    spca508: registered
    usbcore: registered new interface driver spca561
    spca561: registered
    usbcore: registered new interface driver sq905
    sq905: registered
    usbcore: registered new interface driver sq905c
    sq905c: registered
    usbcore: registered new interface driver sunplus
    sunplus: registered
    usbcore: registered new interface driver stk014
    stk014: registered
    usbcore: registered new interface driver t613
    t613: registered
    usbcore: registered new interface driver tv8532
    tv8532: registered
    usbcore: registered new interface driver vc032x
    vc032x: registered
    usbcore: registered new interface driver zc3xx
    zc3xx: registered
    usbcore: registered new interface driver ALi m5602
    ALi m5602: registered
    usbcore: registered new interface driver STV06xx
    STV06xx: registered
    usbcore: registered new interface driver ibmcam
    usbcore: registered new interface driver ultracam
    konicawc: v1.4:Konica Webcam driver
    usbcore: registered new interface driver konicawc
    usbcore: registered new interface driver vicam
    quickcam_messenger: v0.01:Logitech Quickcam Messenger USB
    usbcore: registered new interface driver QCM
    usbcore: registered new interface driver s2255
    usbcore: registered new interface driver uvcvideo
    USB Video Class driver (v0.1.0)
    S3C2410 Watchdog Timer, (c) 2004 Simtec Electronics
    s3c2410-wdt s3c2410-wdt: starting watchdog timer
    s3c2410-wdt s3c2410-wdt: watchdog active, reset abled, irq enabled
    mapped channel 0 to 0
    s3c2440-sdi s3c2440-sdi: powered down.
    s3c2440-sdi s3c2440-sdi: initialisation done.
    s3c2440-sdi s3c2440-sdi: powered down.
    usbcore: registered new interface driver usbhid
    usbhid: v2.6:USB HID core driver
    Advanced Linux Sound Architecture Driver Version 1.0.18a.
    No device for DAI UDA134X
    No device for DAI s3c24xx-i2s
    S3C24XX_UDA134X SoC Audio driver
    UDA134X SoC Audio Codec
    asoc: UDA134X <-> s3c24xx-i2s mapping ok
    ALSA device list:
      #0: S3C24XX_UDA134X (UDA134X)
    TCP cubic registered
    NET: Registered protocol family 17
    RPC: Registered udp transport module.
    RPC: Registered tcp transport module.
    lib80211: common routines for IEEE802.11 drivers
    s3c2410-rtc s3c2410-rtc: setting system clock to 2013-10-05 16:41:22 UTC (1380991282)
    yaffs: dev is 32505858 name is "mtdblock2"
    yaffs: passed flags ""
    yaffs: Attempting MTD mount on 31.2, "mtdblock2"
    yaffs: auto selecting yaffs2
    yaffs: restored from checkpoint
    yaffs_read_super: isCheckpointed 1
    VFS: Mounted root (yaffs filesystem) on device 31:2.
    Freeing init memory: 240K
    mount: mounting debugfs on /sys/kernel/debug failed: No such file or directory
    eth0: link down

    Please press Enter to activate this console. eth0: link up, 100Mbps, full-duplex, lpa 0xCDE1

    [root@TQ2440 /]#
    [root@TQ2440 /]#
    [root@TQ2440 /]#

    个人感觉,u-boot的架构做得会越来越像Linux内核。

    完!!

  • 相关阅读:
    iOS下的四舍五入
    下载私有库 classdump命令 privateFrameworks
    苹果账号下添加测试设备
    新的Mac下如何配置开发者账号信息
    open开发笔记
    C#面向对象基础抽象类
    C#面向对象基础继承
    C#面向对象基础接口
    C#面向对象基础对象引用
    COJ1165(Nearest Numbers)
  • 原文地址:https://www.cnblogs.com/pengdonglin137/p/4264836.html
Copyright © 2011-2022 走看看