u-boot1.1.6移植:
1、cp -R at91rm9200dk myboard
1)cp at91rm9200dk.c myboard.c
2)vi Makefle
将COBJS := at91rm9200dk.o at45.o flash.o 改为 COBJS := myboard.o at45.o flash.o
3)添加Nor Flash驱动,芯片型号是MBM29LV320BE(FUJITSU)
vi flash.c
1>加入
OrgDef OrgMBM29LV320BE[] =
{
{ 8, 8*1024 }, /* 8 * 8 kBytes sectors */
{ 63, 64*1024 }, /* 63 * 64 kBytes sectors */
};
2>加入
#define RESET 0xF0
3>
在函数void flash_identification (flash_info_t * info)中加入:
/* Read Reset */
MEM_FLASH_ADDR1 = FLASH_CODE1;
MEM_FLASH_ADDR2 = FLASH_CODE2;
MEM_FLASH_ADDR1 = RESET;
/* Go to Autoselect mode */
MEM_FLASH_ADDR1 = FLASH_CODE1;
MEM_FLASH_ADDR2 = FLASH_CODE2;
MEM_FLASH_ADDR1 = ID_IN_CODE;
/* Vendor type */
info->flash_id = FUJ_MANUFACT & FLASH_VENDMASK;
printf("FUJ and AMD\n");
/* AMD Flash */
info->flash_id |= AMD_ID_LV320B & FLASH_TYPEMASK;
printf("MBM29LV320B (32Mbit)\n");
4>
在函数ulong flash_init (void)中加入:
/* MBM29LV320BE Flash */
pOrgDef = OrgMBM29LV320BE;
flash_nb_blocks = sizeof (OrgMBM29LV320BE) / sizeof (OrgDef);
5>
在函数void flash_print_info (flash_info_t * info)中加入:
case (FUJ_MANUFACT & FLASH_VENDMASK):
printf("FUJ");
break;
case (AMD_ID_LV320B & FLASH_TYPEMASK):
printf("MBM29LV320BE (32Mbit\n)");
break;
6>
在函数int flash_erase (flash_info_t * info, int s_first, int s_last)中加入:
if ((info->flash_id & FLASH_VENDMASK) != (FUJ_MANUFACT & FLASH_VENDMASK))
{
return ERR_UNKNOWN_FLASH_VENDOR;
}
2、回到u-boot目录下,打开Makefile文件,加入:
myboard_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t myboard NULL at91rm9200
3、在u-boot目录下,打开MAKEALL文件,在
LIST_ARM9=" \
at91rm9200dk cmc_pu2 \
ap920t ap922_XA10 ap926ejs ap946es \
ap966 cp920t cp922_XA10 cp926ejs \
cp946es cp966 lpd7a400 mp2usb \
mx1ads mx1fs2 netstar omap1510inn \
omap1610h2 omap1610inn omap730p2 sbc2410x \
scb9328 smdk2400 smdk2410 trab \
VCMA9 versatile versatileab versatilepb \
voiceblue \
"
加入 myboard,即:
LIST_ARM9=" \
at91rm9200dk cmc_pu2 \
ap920t ap922_XA10 ap926ejs ap946es \
ap966 cp920t cp922_XA10 cp926ejs \
cp946es cp966 lpd7a400 mp2usb \
mx1ads mx1fs2 netstar omap1510inn \
omap1610h2 omap1610inn omap730p2 sbc2410x \
scb9328 smdk2400 smdk2410 trab \
VCMA9 versatile versatileab versatilepb \
voiceblue myboard \
"
4、cd include/configs,cp at91rm9200dk.h myboard.h,打开myboard.h文件
1)加入#define CONFIG_SKIP_LOWLEVEL_INIT (由于板子会自动进行初始化,所以此处要跳过去,否则会成为死循环)
2)由于我的板子上的Nor Flash是4M,所以把
#define PHYS_FLASH_SIZE 0x200000
改为
#define PHYS_FLASH_SIZE 0x400000
3)由于我的板子上的Nor Flash共71个扇区,所以把
#define CFG_MAX_FLASH_SECT 256
改为
#define CFG_MAX_FLASH_SECT 71
5、
export BUILD_DIR=/home/lb/abc
make distclean
make myboard_config
make all
在/home/lb/abc中会生成三个文件u-boot.bin、u-boot和u-boot.srec,我们只需要u-boot.bin文件。
kernel2.6.*移植:
1、
cd linux-2.6.*
zcat ../2.6.*-at91.patch.gz |patch -p1
2、
vi Makefile
把
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=
改为
ARCH ?= arm
CROSS_COMPILE ?= 相应交叉编译环境
3、
make mrproper
make at91rm9200dk_defconfig
make menuconfig
make
4、
cp linux2.6.*/vmlinux /home/lb/kernel
cp linux2.6.*/arch/arm/boot/zImage /home/lb/kernel
5、
cd /home/lb/kernel
1)[编译器绝对路径]/bin/arm-linux-objcopy -O binary -S vmlinux linux.bin
2)gzip -v9 linux.bin
3)/home/lb/abc/tools/mkimage -A arm -O linux -C gzip -a 0x20008000 -e 0x20008000 -d linux.bin.gz uImage
得到了内核映射文件uImage
构建文件系统:
要先安装mtd(memory technology device),debian中安装mtd-tools,gentoo中安装mtd-utils。
1、建立内存映像文件ramdisk
1)mkdir -p /mnt/loop
2)dd if=/dev/zero of=/tmp/loop_tmp bs=1k count=3072
3)/sbin/losetup /dev/loop0 /tmp/loop_tmp
将设备与临时文件联系起来。如果出现“ioctl: LOOP_SET_FD: 设备或资源忙”的提示,说明设备还和一文件联系,可以用/sbin/losetup /dev/loop0来看,并可用-d来删除。
4)mkfs.ext2 –m0 /dev/loop0
mkfs.ext2将会自动判断设备容量的大小并相应地配置自身,-m0参数防止它给root保留空,这样会腾出更多地有用空间。
5)mount -t ext2 /dev/loop0 /mnt/loop
6)mkdir {bin,sbin,usr,dev,etc,lib,home,opt,root,src,tmp,var,mnt,proc,sys,initrd}
7)umount /mnt/loop
卸载此文件系统,得到的/tmp/loop_tmp就是ramdisk,可以将其改名为ramdisk
8)gzip - v9 /tmp/ramdisk
在/tmp中生成一个ramdisk.gz,这样一个内存映像文件就生成了。
2、编译busybox
1)
make defconfig
make menuconfig
2)busybox设置
1>在Build Options中的Build BusyBox as a static binary (no shared libs)是问是否将busybox静态链接,如果是glibc的话不选,如果是uclibc的话要选。
2>在Installation Options选项中,默认地, 运行 make install之后, BusyBox将被安装到./_install目录.
3>NFS是肯定要选的, 使用NFS将宿主机的文件系统mount到目标板上, 这是嵌入式Linux程序开发的一个重要方面.
4>由于可使用NFS, 能在宿主机上实现的功能就都不需要在目标板上实现了。
5>Debian Utilities 全不选, Editors全不选, System Logging Utilities全不选.
6>解压缩工具只安装解压工具,gzip、bzip2、tar工具(要求目标板能解压缩tar.bz2和tar.gz文件).
7>shell使用ash.
3)编译及安装
make TARGET_ARCH=arm CROSS=arm-linux- -j2
make install
3、用busybox给ramdisk增加命令
1)
gunzip ramdisk.gz
mount -o loop ramdisk /mnt/ramdisk
2)
cd busybox1.4.1/_install
cp -rfv * /mnt/ramdisk
umount /mnt/ramdisk
gzip -v9 ramdisk
生成最后带有busybox命令的内存映像文件ramdisk.gz
阅读(2549) | 评论(0) | 转发(0) |