u-boot-2015.01在tq2440上的初步移植

2023-06-26  

开发板:     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/ 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//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//cpu//.


      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//common/Makefile exists, the vendor common

      directory is compiled.

      If CONFIG_SYS_BOARD is also set, the sources under

      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//

      or 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/.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 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)

文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。