移植到at91板子上的linux内核 配置板子的文件在哪写,at91sam9263上面移植u-boot以及kernel的详细步骤...

文章摘自:http://hi.baidu.com/%B2%DC%BF%AA%C6%EB/blog/item/7882778d2dbfc215b21bba36.html

我的板子是ATMEL的芯片,杭州一个小厂生产的,质量比较次,不支持从nandflash直接启动。所以需要自己编译Bootstrap放到dataflash里面用来引导u-boot。

u-boot在我们的板子上面可以烧写到dataflash也可以烧写到nandflash,所以下面分情况讨论。

1 编译Bootstrap

1.1 从dataflash启动uboot

(1)修改:board/at91sam9263ek/dataflash/at91sam9263ek.h文件,如下内容

//#define   CRYSTAL_16_36766MHZ 1 //注释这一行

#define CRYSTAL_18_432MHZ 1    //添加这一行,因为我们at91sam9263ek这块板子的晶振是18.432M

(2)修改board/at91sam9263ek/dataflash/Makefile

CROSS_COMPILE=arm-elf-

(3) 然后运行:

cd board/at91sam9263ek/dataflash/

make clean && make

(4)将生成的dataflash_at91sam9263ek.bin烧录到dataflash的0X0地址。

1.2 从nandflash启动uboot

(1)修改:board/at91sam9263ek/nandflash/at91sam9263ek.h文件,如下内容

//#define    CRYSTAL_16_36766MHZ    1

#define CRYSTAL_18_432MHZ 1

(2)修改board/at91sam9263ek/dataflash/Makefile

CROSS_COMPILE=arm-linux-    //这个改为你机器的交叉编译工具的前缀

(3)修改include/nand_ids.h 文件

static struct SNandInitInfo NandFlash_InitInfo[] = {

{0xecda, 0x800, 0x20000, 0x800, 0x40, 0x0, "Samsung K9F2G08U0M 256Mb/0"},

{0x2cca, 0x800, 0x20000, 0x800, 0x40, 0x1, "Micron MT29F2G16AAB 256Mb/0"},

{0x2cda, 0x800, 0x20000, 0x800, 0x40, 0x0, "Micron MT29F2G08AAC 256Mb/0"},

{0xecf1, 0x400, 0x20000, 0x800, 0x40, 0x0, "Samsung K9F1G08U0M 128Mb/0"}, //增加这一行,支持板子上面的nandflash

{0x2cda, 0x800, 0x20000, 0x800, 0x40, 0x0, "Micron MT29F2G08AAC 256Mb/0"},

{0,}

};

(4) 然后运行:

cd board/at91sam9263ek/nandflash

make clean && make

(5)将生成的nandflash_at91sam9263ek.bin烧录到nandflash的0X20000地址。//这个地址在第一步中的头文件中定义

2 编译u-boot

2.1 从dataflash中启动uboot

(1)make at91sam9263ek_config

make

(2)最后将源文件主目录下生成的u-boot.bin烧录到dataflash的0X8400地址。//这个地址在bootstrap的相应的头文件board/at91sam9263ek/dataflash/at91sam9263ek.h定义

2.2 从nandflash启动uboot

(1)修改include/configs/at91sam9263ek.h

#undef CFG_USE_DATAFLASH

#define CFG_USE_NANDFLASH    1

(2)然后

make at91sam9263ek_config

make

(3)最后将源文件主目录下生成的u-boot.bin烧录到nandflash的0X20000地址。//这个地址在bootstrap的相应的头文件board/at91sam9263ek/nandflash/at91sam9263ek.h定义

3 编译内核

(1)修改arch/arm/mach-at91/board-sam9263ek.c

第57行:at91sam9263_initialize(18432000); //改一下时钟频率

找到类似如下的行,改成没有被注释的。   (这个与我的LCD屏幕有关)

//.left_margin = 1,        .right_margin   = 33,

.left_margin    = 48,       .right_margin   = 16,

//.upper_margin = 1,        .lower_margin   = 0,

.upper_margin   = 31,       .lower_margin   = 12,

//.hsync_len    = 5,        .vsync_len = 1,

.hsync_len = 96,       .vsync_len = 2,

(2)配置编译

cp ./arch/arm/configs/at91sam9263ek_defconfig .config

make ARCH=arm oldconfig

make ARCH=arm menuconfig    //在这里设置你需要的模块或者功能

make ARCH=arm CROSS_COMPILE=arm-linux- uImage

(在编译之前将u-boot下的tools/mkimage复制到/bin目录下,否则会报错找不到mkimage命令)

(3)烧录

将生成的uImage文件烧写到nandflash的0x20 0000。

4 上板子

板子上电运行

4.1 nandflash启动内核

(1)设置环境变量

setenv ipaddr 172.16.100.103       //板子的ip地址

setenv serverip 172.16.100.100    //服务器ip地址

setenv ethaddr a:a:a:f:d:1             //mac地址

(2)启动内核

nboot 0x22000000 0 0x200000

bootm 0x22000000

4.2 tftp加载,启动内核

(1)设置环境变量

setenv ipaddr 172.16.100.102       //板子的ip地址

setenv serverip 172.16.100.103    //服务器ip地址

setenv ethaddr a:a:a:f:d:1             //mac地址

setenv bootargs 'mem=64M console=ttyS0,115200 root=/dev/nfs rw nfsroot=172.16.100.103:/maxwit/rootfs ip=172.16.100.102:172.16.100.1:255.255.255.0'

saveenv(保存设置)

ping 172.16.100.103 //测试服务器是否连通,alive或者unreachable

注释:第四个环境变量用来加载nfs根文件系统的。

(2)加载内核

i. 设置主机的tftp服务

vi /etc/inetd.conf //将存放uImage的目录添加进来

/etc/init.d/openbsd-inetd restart //重启tftp服务

ii. 板子加载

tftp 0x22008000 uImage//或者tftpboot 0x22008000 uImage

bootm 0x22008000ls

5 自动加载内核

setenv bootcmd 'nboot 0x22000000 0 0x200000; saveenv; bootm 0x22000000'

自动加载文件系统

setenv bootargs 'mem=64M console=ttyS0,115200 root=/dev/mtdblock2 rootfstype=jffs2'

reset之后就可以看到u-boot自动加载内核了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值