1,下载源码和补丁 root@emboard:/workdir/atmel/at91sam9260# AT91Bootstrap1.14.zip arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 u-boot-1.3.4-exp.3.diff u-boot-1.3.4.tar.bz 22.6.24.at91.2-exp.patch.gz 2.6.24-at91.patch.gz linux-2.6.24 linux-2.6.24.tar.bz2 2,建立工作目录文件夹,解压源码和打入相应的补丁: 3,开始编译源码: 3.1:编译一级启动代码: root@emboard:/workdir/atmel/at91sam9260/AT91Bootstrap# unzip AT91Bootstrap1.14.zip root@emboard:/workdir/atmel/at91sam9260/AT91Bootstrap# ls AT91Bootstrap1.14.zip Bootstrap-v1.14 root@emboard:/workdir/atmel/at91sam9260/AT91Bootstrap# cd Bootstrap-v1.14/board/at91sam9260ek/nandflash/ root@emboard:/workdir/atmel/at91sam9260/AT91Bootstrap/Bootstrap-v1.14/board/at91sam9260ek/nandflash# ls at91sam9260ek.h debug.o main.o nandflash_at91sam9260ek.elf pmc.o udiv.o at91sam9260ek.o div0.o Makefile nandflash_at91sam9260ek.map sdramc.o _udivsi3.o crt0_gnu.o gpio.o nandflash_at91sam9260ek.bin nandflash.o string.o _umodsi3.o root@emboard:/workdir/atmel/at91sam9260/AT91Bootstrap/Bootstrap-v1.14/board/at91sam9260ek/nandflash# make clean rm -f *.o *.bin *.elf *.map root@emboard:/workdir/atmel/at91sam9260/AT91Bootstrap/Bootstrap-v1.14/board/at91sam9260ek/nandflash# ls at91sam9260ek.h Makefile 因为9260编译后必须使这个烧入文件小于4K,所以要针对Makefile做修改: root@emboard:/workdir/atmel/at91sam9260/AT91Bootstrap/Bootstrap-v1.14/board/at91sam9260ek/nandflash# vim Makefile 修改下面这个地方: OBJDUMP=$(CROSS_COMPILE)objdump CCFLAGS=-g -mcpu=arm9 -O1 -Wall -D$(TARGET) -I$(INCL) ASFLAGS=-g -mcpu=arm9 -c -O1 -Wall -D$(TARGET) -I$(INCL) -DTOP_OF_MEM=$(TOP_OF_MEMORY) root@emboard:/workdir/atmel/at91sam9260/AT91Bootstrap/Bootstrap-v1.14# cd include/ root@emboard:/workdir/atmel/at91sam9260/AT91Bootstrap/Bootstrap-v1.14/include# ls AT91CAP9_inc.h AT91SAM9263_inc.h AT91SAM9XE128_inc.h debug.h nandflash.h part.h sdramc.h AT91SAM9260_inc.h AT91SAM9G45_inc.h dataflash.h gpio.h nand_ids.h pmc.h AT91SAM9261_inc.h AT91SAM9RL_inc.h ddramc.h main.h norflash.h sddrc.h 修改这个文件: root@emboard:/workdir/atmel/at91sam9260/AT91Bootstrap/Bootstrap-v1.14/include# vim nand_ids.h #ifndef _NAND_IDS_H #define _NAND_IDS_H #include "../include/nandflash.h" /* Supported NandFlash devices */ static struct SNandInitInfo NandFlash_InitInfo[] = { {0xecda, 0x800, 0x20000, 0x800, 0x40, 0x0, "K9F2G08U0M\0"}, //{0xecaa, 0x800, 0x20000, 0x800, 0x40, 0x0, "K9F2G08R0A\0"}, //{0x2cca, 0x800, 0x20000, 0x800, 0x40, 0x1, "MT29F2G16AAB\0"}, //{0x2cda, 0x800, 0x20000, 0x800, 0x40, 0x0, "MT29F2G08AAC\0"}, //{0x20aa, 0x800, 0x20000, 0x800, 0x40, 0x0, "STMNAND02GR3B\0"}, //{0x2caa, 0x800, 0x20000, 0x800, 0x40, 0x0, "MT29F2G08ABD\0"}, {0,} }; #endif 屏蔽掉你不用的nandflash,这样就可以使编译最后的大小小于4K! root@emboard:/workdir/atmel/at91sam9260/AT91Bootstrap/Bootstrap-v1.14/board/at91sam9260ek/nandflash# make root@emboard:/workdir/atmel/at91sam9260/AT91Bootstrap/Bootstrap-v1.14/board/at91sam9260ek/nandflash# ls -l total 140 -rwxrwxrwx 1 root root 5118 2008-12-04 19:18 at91sam9260ek.h -rw-r--r-- 1 root root 5652 2010-05-18 21:26 at91sam9260ek.o -rw-r--r-- 1 root root 2604 2010-05-18 21:26 crt0_gnu.o -rw-r--r-- 1 root root 992 2010-05-18 21:26 debug.o -rw-r--r-- 1 root root 2068 2010-05-18 21:26 div0.o -rw-r--r-- 1 root root 8336 2010-05-18 21:26 gpio.o -rw-r--r-- 1 root root 2472 2010-05-18 21:26 main.o -rwxr--r-- 1 nobody nogroup 3219 2010-05-18 21:22 Makefile -rwxr-xr-x 1 root root 3972 2010-05-18 21:26 nandflash_at91sam9260ek.bin -rwxr-xr-x 1 root root 27381 2010-05-18 21:26 nandflash_at91sam9260ek.elf -rw-r--r-- 1 root root 18270 2010-05-18 21:26 nandflash_at91sam9260ek.map -rw-r--r-- 1 root root 9924 2010-05-18 21:26 nandflash.o -rw-r--r-- 1 root root 4092 2010-05-18 21:26 pmc.o -rw-r--r-- 1 root root 3864 2010-05-18 21:26 sdramc.o -rw-r--r-- 1 root root 3448 2010-05-18 21:26 string.o -rw-r--r-- 1 root root 4920 2010-05-18 21:26 udiv.o -rw-r--r-- 1 root root 1752 2010-05-18 21:26 _udivsi3.o -rw-r--r-- 1 root root 1828 2010-05-18 21:26 _umodsi3.o 可以看到nandflash_at91sam9260ek.bin小于4K! 将编译出来的文件写入nandflash的0x00000000里面去: 3.2:编译u-boot: root@emboard:/workdir/at91sam9260/u-boot# ls -l total 7668 -rw-rw-rw- 1 root root 111418 2009-10-23 10:08 u-boot-1.3.4-exp.3.diff -rw-rw-rw- 1 root root 7714456 2009-05-11 09:51 u-boot-1.3.4.tar.bz2 root@emboard:/workdir/at91sam9260/u-boot# tar -xjvf u-boot-1.3.4.tar.bz2 root@emboard:/workdir/at91sam9260/u-boot# ls u-boot-1.3.4 u-boot-1.3.4-exp.3.diff u-boot-1.3.4.tar.bz2 进入u-boot目录: root@emboard:/workdir/at91sam9260/u-boot# cd u-boot-1.3.4 将补丁复制到u-boot目录里: root@emboard:/workdir/at91sam9260/u-boot/u-boot-1.3.4# cp ../u-boot-1.3.4-exp.3.diff . 打入atmel的补丁: root@emboard:/workdir/at91sam9260/u-boot/u-boot-1.3.4# cat u-boot-1.3.4-exp.3.diff | patch -p1 root@emboard:/workdir/atmel/at91sam9260/u-boot/u-boot-1.3.4# make distclean root@emboard:/workdir/atmel/at91sam9260/u-boot/u-boot-1.3.4# make at91sam9260ek_nandflash_config ... with environment variable in NAND FLASH Configuring for at91sam9260ek board... root@emboard:/workdir/atmel/at91sam9260/u-boot/u-boot-1.3.4# make 这样就可以编译出u-boot.bin 可以去这个文件来看u-boot烧写进nandflash的地址 root@emboard:/workdir/atmel/at91sam9260/AT91Bootstrap/Bootstrap-v1.14/board/at91sam9260ek/nandflash# vim at91sam9260ek.h /* ******************************************************************* */ /* BootStrap Settings */ /* */ /* ******************************************************************* */ #define IMG_ADDRESS 0x20000 /* Image Address in NandFlash */ #define IMG_SIZE 0x40000 /* Image Size in NandFlash */ 看到烧到nandflash的地址是:0x20000 然后打开串口,写入进nandflash串口信息如下: RomBOOT > U-Boot 1.3.4 (May 18 2010 - 21:40:34) DRAM: 64 MB NAND: 256 MiB *** Warning - bad CRC or NAND, using default environment In: serial Out: serial Err: serial Net: macb0 macb0: Starting autonegotiation... macb0: Autonegotiation complete macb0: link up, 100Mbps full-duplex (lpa: 0x41e1) Hit any key to stop autoboot: 0 NAND read: device 0 offset 0xa0000, size 0x200000 2097152 bytes read: OK Wrong Image Format for bootm command ERROR: can't get kernel image! U-Boot> 可以看到u-boot启动起来了: 然后插上网线,看下网络能通吗? U-Boot> ping 192.168.1.1 macb0: link up, 100Mbps full-duplex (lpa: 0x41e1) *** ERROR: `ipaddr' not set ping failed; host 192.168.1.1 is not alive 看到提示没有设置ipaddr: U-Boot> setenv ipaddr 192.168.1.250 U-Boot> printenv bootargs=console=ttyS0,115200 root=/dev/mtdblock5 mtdparts=at91_nand:128k(bootstrap)ro,256k(uboot)ro,128k(env1)ro,128k(env2)ro,2M(linux),-(root) rw rootfstype=jffs2 bootcmd=nand read 0x22000000 0xA0000 0x200000; bootm bootdelay=3 baudrate=115200 stdin=serial stdout=serial stderr=serial ethact=macb0 ipaddr=192.168.1.250 Environment size: 321/131067 bytes U-Boot> saveenv Saving Environment to NAND... Erasing redundant Nand... Erasing at 0x80000 -- 100% complete. Writing to redundant Nand... done U-Boot> setenv ethaddr 3e:36:65:ba:6f:be U-Boot> setenv netmask 255.255.255.0 U-Boot> setenv gatewayip 192.168.1.1 U-Boot> savenv Unknown command 'savenv' - try 'help' U-Boot> saveenv Saving Environment to NAND... Erasing Nand... Erasing at 0x60000 -- 100% complete. Writing to Nand... done U-Boot> ping 192.168.1.1 macb0: link up, 100Mbps full-duplex (lpa: 0x41e1) Using macb0 device host 192.168.1.1 is alive 现在可以ping通网络了: 我们现在ping下google: U-Boot> ping 66.249.89.104 macb0: link up, 100Mbps full-duplex (lpa: 0x41e1) Using macb0 device host 66.249.89.104 is alive 可以看到也能ping到外网! 3.3移植linux内核: root@emboard:/workdir/atmel/at91sam9260/kernel# tar -xjvf linux-2.6.24.tar.bz2 root@emboard:/workdir/atmel/at90sam9260/kernel# ls 2.6.24.at91.2-exp.patch.gz 2.6.24-at91.patch.gz linux-2.6.24.tar.bz2 root@emboard:/workdir/at91sam9260/kernel/linux-2.6.24# zcat 2.6.24.at91.2-exp.patch.gz | patch -p1 root@emboard:/workdir/at91sam9260/kernel/linux-2.6.24# zcat 2.6.24-at91.patch.gz | patch -p1 root@emboard:/workdir/atmel/at91sam9260/kernel# cd linux-2.6.24 root@emboard:/workdir/atmel/at91sam9260/kernel/linux-2.6.24# ls arch CREDITS drivers init kernel Makefile net samples sound vmlinux block crypto fs ipc lib mm README scripts System.map vmlinux.o COPYING Documentation include Kbuild MAINTAINERS Module.symvers REPORTING-BUGS security usr root@emboard:/workdir/at91sam9261/kernel/linux-2.6.24# vim Makefile linux-2.6.24 主目录下有个Makefile 文件,打开,找到185 行左右,修改 ARCH ?= arm CROSS_COMPILE ?= arm-none-linux-gnueabi- 保存退出。 root@emboard:/workdir/at91sam9261/kernel/linux-2.6.24# make distclean root@emboard:/workdir/at91sam9261/kernel/linux-2.6.24# make at91sam9261ek_defconfig root@emboard:/workdir/at91sam9261/kernel/linux-2.6.24# make menuconfig 然后配置: kernel Features -->选中: [*]Use the ARM EABI to compile the kernel [*]Allow old ABI ............ 然后编译: root@emboard:/workdir/atmel/at91sam9260/kernel/linux-2.6.24# make uImage root@emboard:/workdir/atmel/at91sam9260/kernel/linux-2.6.24/arch/arm/mach-at91# pwd /workdir/atmel/at91sam9260/kernel/linux-2.6.24/arch/arm/mach-at91 root@emboard:/workdir/atmel/at91sam9260/kernel/linux-2.6.24/arch/arm/mach-at91# vim board-sam9260ek.c 修改这里可以修改为自己想要的: 116行开始: /* * NAND flash */ static struct mtd_partition __initdata ek_nand_partition[] = { { .name = "Bootstrap", .offset = 0, .size = 4 * 1024 * 1024, }, { .name = "u-boot", .offset = 4 * 1024 * 1024, .size = 4 * 1024 * 1024, }, { .name = "kernel", .offset = 8 * 1024 * 1024, .size = 22 * 1024 * 1024, }, { .name = "fs", .offset = 30 * 1024 * 1024, .size = 40 * 1024 * 1024, }, { .name = "user space0", .offset = 70 * 1024 * 1024, .size = 60 * 1024 * 1024, }, { .name = "user space2", .offset = 130 * 1024 * 1024, .size = MTDPART_SIZ_FULL, }, }; 我的是256M的nandflash! 然后编译写入板子: 串口信息如下: RomBOOT > U-Boot 1.3.4 (May 18 2010 - 21:40:34) DRAM: 64 MB NAND: 256 MiB *** Warning - bad CRC or NAND, using default environment In: serial Out: serial Err: serial Net: macb0 macb0: Starting autonegotiation... macb0: Autonegotiation complete macb0: link up, 100Mbps full-duplex (lpa: 0x41e1) Hit any key to stop autoboot: 0 NAND read: device 0 offset 0xa0000, size 0x200000 2097152 bytes read: OK Wrong Image Format for bootm command ERROR: can't get kernel image! U-Boot> printenv bootargs=console=ttyS0,115200 root=/dev/mtdblock5 mtdparts=at91_nand:128k(bootstrap)ro,256k(uboot)ro,128k(env1)ro,128k(env2)ro,2M(linux),-(root) rw rootfstype=jffs2 bootcmd=nand read 0x22000000 0xA0000 0x200000; bootm bootdelay=3 baudrate=115200 stdin=serial stdout=serial stderr=serial ethact=macb0 Environment size: 300/131067 bytes U-Boot> nand read 0x22000000 0x800000 0x200000 NAND read: device 0 offset 0x800000, size 0x200000 2097152 bytes read: OK U-Boot> bootm 0x22000000 ## Booting kernel from Legacy Image at 22000000 ... Image Name: Linux-2.6.24 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 1070252 Bytes = 1 MB Load Address: 20008000 Entry Point: 20008000 Verifying Checksum ... OK Loading Kernel Image ... OK OK Starting kernel ... Uncompressing Linux....................................................................... done, booting the kernel. Linux version 2.6.24 (root@emboard) (gcc version 4.2.3 (Sourcery G++ Lite 2008q1-126)) #1 Tue May 18 22:50:41 HKT 2010 CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177 Machine: Atmel AT91SAM9260-EK Memory policy: ECC disabled, Data cache writeback Clocks: CPU 198 MHz, master 99 MHz, main 18.432 MHz CPU0: D VIVT write-back cache CPU0: I cache: 8192 bytes, associativity 4, 32 byte lines, 64 sets CPU0: D cache: 8192 bytes, associativity 4, 32 byte lines, 64 sets Built 1 zonelists in Zone order, mobility grouping on. Total pages: 16256 Kernel command line: console=ttyS0,115200 root=/dev/mtdblock5 mtdparts=at91_nand:128k(bootstrap)ro,256k(uboot)ro,128k(env1)ro,128k(env2)ro,2M(linux),-(root) rw rootfstype=jffs2 AT91: 96 gpio irqs in 3 banks PID hash table entries: 256 (order: 8, 1024 bytes) Console: colour dummy device 80x30 console [ttyS0] 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: 62616KB available (1944K code, 194K data, 100K init) Mount-cache hash table entries: 512 CPU: Testing write buffer coherency: ok net_namespace: 64 bytes NET: Registered protocol family 16 SCSI subsystem initialized usbcore: registered new interface driver usbfs usbcore: registered new interface driver hub usbcore: registered new device driver usb NET: Registered protocol family 2 Time: pit clocksource has been installed. 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 NetWinder Floating Point Emulator V0.97 (double precision) io scheduler noop registered io scheduler anticipatory registered (default) Internal error: Oops - undefined instruction: 0 [#1] Modules linked in: CPU: 0 Not tainted (2.6.24 #1) PC is at device_create+0x20/0xb8 LR is at tty_register_device+0xb4/0xd0 pc : [<c0101288>] lr : [<c00e8c18>] psr: a0000013 sp : c3c19ea8 ip : c3c19ed8 fp : c3c19ed0 r10: 00000000 r9 : 00000000 r8 : c3c18000 r7 : c00e8c17 r6 : 00000004 r5 : c3c36bc0 r4 : 00000002 r3 : c3c19ee0 r2 : 00400003 r1 : 00000000 r0 : c3c36bc0 Flags: NzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment kernel Control: 0005317f Table: 20004000 DAC: 00000017 Process swapper (pid: 1, stack limit = 0xc3c18268) Stack: (0xc3c19ea8 to 0xc3c1a000) 9ea0: 00000000 c3c19ea8 c00e8c18 00000002 00000001 00000004 9ec0: 00000000 c3c19f3c c3c19ed8 c00e8c18 c010127c c3c19ee0 0000001c 00000004 9ee0: 33797474 c3c19e00 c010530c c019cf94 00000000 c3c52804 c3c52800 c3cab800 9f00: 00000000 c3c18000 00000000 00000000 c3c19f3c c3c19f20 c007d518 c0105210 9f20: 00000003 c3c52800 c3cab800 00000000 c3c19f64 c3c19f40 c00e9744 c00e8b74 9f40: c3c19f64 00400001 c0234404 c0233ae0 00000000 c001d60c c3c19f7c c3c19f68 9f60: c0017a2c c00e95b0 00000000 c0233ae0 c3c19f94 c3c19f80 c00172c4 c0017988 9f80: c001e000 00000000 c3c19ff4 c3c19f98 c0008934 c0017160 c0035918 c00354d4 9fa0: 00000000 c3c19fb0 c0021e64 c0035910 00000000 00000000 c0008870 c003bbc0 9fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 9fe0: 00000000 00000000 00000000 c3c19ff8 c003bbc0 c0008880 ffffff7f feffefff Backtrace: [<c010126c>] (device_create+0x4/0xb8) from [<c00e8c18>] (tty_register_device+0xb4/0xd0) r7:00000000 r6:00000004 r5:00000001 r4:00000002 [<c00e8b64>] (tty_register_device+0x0/0xd0) from [<c00e9744>] (tty_register_driver+0x1a4/0x1e4) r7:00000000 r6:c3cab800 r5:c3c52800 r4:00000003 [<c00e95a0>] (tty_register_driver+0x0/0x1e4) from [<c0017a2c>] (vty_init+0xb4/0xec) r7:c001d60c r6:00000000 r5:c0233ae0 r4:c0234404 [<c0017978>] (vty_init+0x0/0xec) from [<c00172c4>] (tty_init+0x174/0x1cc) r5:c0233ae0 r4:00000000 [<c0017150>] (tty_init+0x0/0x1cc) from [<c0008934>] (kernel_init+0xc4/0x284) r5:00000000 r4:c001e000 [<c0008870>] (kernel_init+0x0/0x284) from [<c003bbc0>] (do_exit+0x0/0x710) Code: e24dd00c e2505000 e1a07001 e1a06002 (0a000019) ---[ end trace 119d4c116316149b ]--- Kernel panic - not syncing: Attempted to kill init! 可以看到内核是启动起来了!但是还文件系统等还没完全启动,所以还需要进行修改! 4:添加内核对yaffs2的支持 上面可以看到,没有对yaffs2文件系统的支持,现在就添加yaffs2的支持 4.1解压yaffs2文件包 root@emboard:/workdir/atmel/at91sam9260/kernel# tar -xzvf yaffs2.tar.gz root@emboard:/workdir/atmel/at91sam9260/kernel# ls 2.6.24.at91.2-exp.patch.gz 2.6.24-at91.patch.gz linux-2.6.24 linux-2.6.24.tar.bz2 yaffs2 yaffs2.tar.gz root@emboard:/workdir/atmel/at91sam9260/kernel# cd linux-2.6.24/fs root@emboard:/workdir/atmel/at91sam9260/kernel# mkdir yaffs root@emboard:/workdir/atmel/at91sam9260/kernel/linux-2.6.24/fs/yaffs2# pwd /workdir/atmel/at91sam9260/kernel/linux-2.6.24/fs/yaffs root@emboard:/workdir/atmel/at91sam9260/kernel/linux-2.6.24/fs/yaffs# cp ../../../yaffs/*.h . root@emboard:/workdir/atmel/at91sam9260/kernel/linux-2.6.24/fs/yaffs# cp ../../../yaffs/*.c . root@emboard:/workdir/atmel/at91sam9260/kernel/linux-2.6.24/fs/yaffs# ls devextras.h yaffs_fs.c yaffs_mtdif1.h yaffs_nandemul2k.h yaffs_qsort.c yportenv.h moduleconfig.h yaffs_getblockinfo.h yaffs_mtdif2.c yaffs_nand.h yaffs_qsort.h yaffs_checkptrw.c yaffs_guts.c yaffs_mtdif2.h yaffs_packedtags1.c yaffs_tagscompat.c yaffs_checkptrw.h yaffs_guts.h yaffs_mtdif.c yaffs_packedtags1.h yaffs_tagscompat.h yaffs_ecc.c yaffsinterface.h yaffs_mtdif.h yaffs_packedtags2.c yaffs_tagsvalidity.c yaffs_ecc.h yaffs_mtdif1.c yaffs_nand.c yaffs_packedtags2.h yaffs_tagsvalidity.h root@emboard:/workdir/atmel/at91sam9260/kernel/linux-2.6.24/fs/yaffs# cp ../../../yaffs2/Makefile.kernel . root@emboard:/workdir/atmel/at91sam9260/kernel/linux-2.6.24/fs/yaffs# ls devextras.h yaffs_ecc.h yaffs_mtdif1.c yaffs_nand.c yaffs_packedtags2.h yaffs_tagsvalidity.h Makefile.kernel yaffs_fs.c yaffs_mtdif1.h yaffs_nandemul2k.h yaffs_qsort.c yportenv.h moduleconfig.h yaffs_getblockinfo.h yaffs_mtdif2.c yaffs_nand.h yaffs_qsort.h yaffs_checkptrw.c yaffs_guts.c yaffs_mtdif2.h yaffs_packedtags1.c yaffs_tagscompat.c yaffs_checkptrw.h yaffs_guts.h yaffs_mtdif.c yaffs_packedtags1.h yaffs_tagscompat.h yaffs_ecc.c yaffsinterface.h yaffs_mtdif.h yaffs_packedtags2.c yaffs_tagsvalidity.c root@emboard:/workdir/atmel/at91sam9260/kernel/linux-2.6.24/fs/yaffs# mv Makefile.kernel Makefile root@emboard:/workdir/atmel/at91sam9260/kernel/linux-2.6.24/fs/yaffs# ls devextras.h yaffs_ecc.h yaffs_mtdif1.c yaffs_nand.c yaffs_packedtags2.h yaffs_tagsvalidity.h Makefile yaffs_fs.c yaffs_mtdif1.h yaffs_nandemul2k.h yaffs_qsort.c yportenv.h moduleconfig.h yaffs_getblockinfo.h yaffs_mtdif2.c yaffs_nand.h yaffs_qsort.h yaffs_checkptrw.c yaffs_guts.c yaffs_mtdif2.h yaffs_packedtags1.c yaffs_tagscompat.c yaffs_checkptrw.h yaffs_guts.h yaffs_mtdif.c yaffs_packedtags1.h yaffs_tagscompat.h yaffs_ecc.c yaffsinterface.h yaffs_mtdif.h yaffs_packedtags2.c yaffs_tagsvalidity.c root@emboard:/workdir/atmel/at91sam9260/kernel/linux-2.6.24/fs/yaffs# pwd /workdir/atmel/at91sam9260/kernel/linux-2.6.24/fs/yaffs2 root@emboard:/workdir/atmel/at91sam9260/kernel/linux-2.6.24/fs/yaffs# cp ../../../yaffs2/Kconfig . root@emboard:/workdir/atmel/at91sam9260/kernel/linux-2.6.24/fs/yaffs# cd .. root@emboard:/workdir/atmel/at91sam9260/kernel/linux-2.6.24/fs# pwd /workdir/atmel/at91sam9260/kernel/linux-2.6.24/fs 119行开始: obj-$(CONFIG_OCFS2_FS) += ocfs2/ obj-$(CONFIG_GFS2_FS) += gfs2/ obj-$(CONFIG_YAFFS_FS) += yaffs/ root@emboard:/workdir/atmel/at91sam9260/kernel/linux-2.6.24/fs# vim Kconfig 修改2119行: endif # NETWORK_FILESYSTEMS source "fs/yaffs2/Kconfig" if BLOCK menu "Partition Types" root@emboard:/workdir/atmel/at91sam9260/kernel/linux-2.6.24# make distclean root@emboard:/workdir/atmel/at91sam9260/kernel/linux-2.6.24# make at91sam9260ek_defconfig root@emboard:/workdir/atmel/at91sam9260/kernel/linux-2.6.24# make menuconfig 修改配置,去选择支持yaffs! Device Drivers --> Memory Technology Device(MTD) support File Systems --> YAFFS2 file system support Autoselect yaffs2 format Disable lazy loading Turn off wide tnodes Kernel Features --> Use the ARM EABI to compile the kernel Allow ole ABI binaries to run with this kernel root@emboard:/workdir/atmel/at91sam9260/kernel/linux-2.6.24# make uImage root@emboard:/workdir/atmel/at91sam9260/kernel/yaffs2/utils# pwd /workdir/atmel/at91sam9260/kernel/yaffs2/utils root@emboard:/workdir/atmel/at91sam9260/kernel/yaffs2/utils# ls Makefile mkyaffs2image.c mkyaffsimage.c root@emboard:/workdir/atmel/at91sam9260/kernel/yaffs2/utils# make root@emboard:/workdir/atmel/at91sam9260/kernel/yaffs2/utils# ls Makefile mkyaffs2image.c mkyaffsimage mkyaffsimage.o yaffs_ecc.o yaffs_packedtags2.o yaffs_tagsvalidity.o mkyaffs2image mkyaffs2image.o mkyaffsimage.c yaffs_ecc.c yaffs_packedtags2.c yaffs_tagsvalidity.c 然后将这个"mkyaffs2image"目录添加到环境变量里面去! root@emboard:/workdir/atmel/at91sam9260/kernel/yaffs2/utils# cd ../../../../ root@emboard:/workdir/atmel/at91sam9260# ls AT91Bootstrap crosstool filesyetem kernel setenv-9260 Source Insight Workdir u-boot 然后就得到支持yaffs2的内核了! ================================================================================== 1,给ubuntu建立tftp服务器: 1.1:首先设置虚拟机能上网步骤如下: 1.1.1配置ip,配置 /etc/network/interfaces 文件 1.1.2.然后是DNS,配置 /etc/resolv.conf 例如:配置静态IP地址 vim /etc/network/interfaces 内容如下: auto lo iface lo inet loopback iface eth0 inet static address 192.168.1.5 netmask 255.255.255.0 gateway 192.168.1.1 auto eth0 配置DNS vim /etc/resolv.conf 增加以下内容: nameserver 202.96.134.133 1.1.3.增加默认网关 route add default gw 192.168.1.1 1.1.4.重新启动网络配置 /etc/init.d/networking restart 1.2:建立tftp服务器: 网上摘抄方法: 1. sudo apt-get install tftp-hpa tftpd-hpa 3.板子通过tftp下载虚拟机的文件: U-Boot> setenv ethaddr 3e:36:65:ba:6f:be U-Boot> setenv serverip 192.168.1.5 U-Boot> setenv bootfile uImage U-Boot> tftp uImage 这样u-boot就可以直接下载文件到板子上了! 当然你也可以下载其它的文件: 2.下载内核: U-Boot> tftp 0x22000000 uImage U-Boot> bootm 0x22000000 Starting kernel ... Uncompressing Linux....................................................................... done, booting the kernel. 停在这里就运行不下去了! google下,知道是内核恐慌.原因是内核的 Linux内核命令行有6个环境变量。如果即将达到或者已经超过了的话 root= 参数会没有传进去启动时会引发panics错误。 所以去看uboot的参数传递,没有! 现在去看下u-boot 配置内核 : RomBOOT U-Boot 1.3.4 (May 18 2010 - 21:40:34) DRAM: 64 MB Environment size: 373/131067 bytes Starting kernel ... Uncompressing Linux.......................................................................... done, booting the kernel. 现在内核已经起来了,现在就是要做文件系统了! 对内核进行重新配置 500)this.width=500;" border=0>500)this.width=500;" border=0> 500)this.width=500;" border=0>500)this.width=500;" border=0> 修改后重新启动板子可以看到mtd分区: RomBOOT U-Boot 1.3.4 (May 18 2010 - 21:40:34) DRAM: 64 MB U-Boot 1.3.4 (May 18 2010 - 21:40:34) DRAM: 64 MB Starting kernel ... Uncompressing Linux.......................................................................................... done, booting the kernel. 3.板子通过nfs挂载主机的文件: root@emboard:/workdir/atmel/at91sam9260# apt-get install nfs-kernel-serve root@emboard:/workdir/atmel/at91sam9260# vim /etc/exports # /etc/exports: the access control list for filesystems which may be exported /workdir/atmel/at91sam9260/filesyetem/rootfs *(rw,sync,no_root_squash) root@emboard:/workdir/atmel/at91sam9260# /etc/init.d/nfs-kernel-server restart ...done. @emboard:/workdir/atmel/at91sam9260# mount -t nfs 192.168.1.5:/workdir/atmel/at91sam9260/filesyetem/rootfs /mnt 这样可以看到成功挂载,nfs服务器配置成功
================================================ 1,问题1 为什么我选择下面的这个内核配置会出现这个结果呢? 选种的话,会自己自动创建MTD分 500)this.width=500;" border=0> NAND device: Manufacturer ID: 0xec, Chip ID: 0xda (Samsung NAND 256MiB 3,3V 8-bit) AT91 NAND: 8-bit, Software ECC Scanning device for bad blocks 6 cmdlinepart partitions found on MTD device at91_nand Creating 6 MTD partitions on "at91_nand": 0x00000000-0x00020000 : "bootstrap" 0x00020000-0x00060000 : "uboot" 0x00060000-0x00080000 : "env1" 0x00080000-0x000a0000 : "env2" 0x000a0000-0x002a0000 : "linux" 0x002a0000-0x10000000 : "root" 不选中的话:500)this.width=500;" border=0> NAND device: Manufacturer ID: 0xec, Chip ID: 0xda (Samsung NAND 256MiB 3,3V 8-bit) AT91 NAND: 8-bit, Software ECC Scanning device for bad blocks Creating 6 MTD partitions on "NAND 256MiB 3,3V 8-bit": 0x00000000-0x00400000 : "Bootstrap" 0x00400000-0x00800000 : "u-boot" 0x00800000-0x01e00000 : "kernel" 0x01e00000-0x04600000 : "fs" 0x04600000-0x08200000 : "user space0" 0x08200000-0x10000000 : "user space2" 2,NFS文件系统搭建: 主机: 安装nfs服务器端和客户端 root@emboard:/workdir/atmel/at91sam9260# /etc/init.d/portmap restart root@emboard:/workdir/atmel/at91sam9260# mount 192.168.1.5:/nfs /workdir/ -o nolock 5,设置开发板的启动参数 U-Boot>setenv bootargs mem=64M console=ttyS0 115200 root=/dev/nfs nfsroot=192.168.1.5:/nfs/rootfs ip=192.168.1.254:192.168.1.5:192.168.1.1:255.255.255.0::eth0:off 这样就可以看到系统通过nfs文件系统启动了. 当然要把内核关于nfs的选项选中 当开发板的系统跑起来后,可以执行这个命令来验证: [root@microcreat /]$mount -o nolock -t nfs 192.168.1.5:/nfs/rootfs /mnt/ 要加上-o nolock 内核里面关于nfs文件系统的选项选上 |
at91sam9260 开发环境的建立
最新推荐文章于 2024-08-26 17:27:26 发布