Chinaunix首页 | 论坛 | 博客
  • 博客访问: 173516
  • 博文数量: 35
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 305
  • 用 户 组: 普通用户
  • 注册时间: 2016-02-01 12:35
个人简介

不断超越自己,将更强大!

文章分类

全部博文(35)

文章存档

2022年(1)

2017年(5)

2016年(29)

我的朋友

分类: 嵌入式

2016-02-26 22:41:56

硬件开发环境:
AT91SAM9261EK开发板,NandFlash启动。使用最新的AT91Bootstrap 3.8.2+Uboot 2014.04。
因为NandFlash是128M的,需要修改Uboot 里nand的型号,添加128M的支持。
Linux version 2.6.26的内核,移植yaffs2文件系统,一直失败!因此,先使用cramfs文件系统,如果成功跑起来,至少说明文件系统的文件准备好了。
在driver/nandflash.c中,添加128MB NandFlash信息!!

/* Samsung K9F1G08U0A 128MB */
    {0xecf1, 0x400, 0x20000, 0x800, 0x40, 0x0},

注意使用Cramfs根文件系统(简单,只读),需要修改Uboot里面的启动参数,这里修改:

include/configs/at91sam9261ek.h

/* bootstrap + u-boot + env + linux in nandflash */
#define CONFIG_ENV_IS_IN_NAND
#define CONFIG_ENV_OFFSET 0xc0000
#define CONFIG_ENV_OFFSET_REDUND 0x100000
#define CONFIG_ENV_SIZE 0x20000 /* 1 sector = 128 kB */
#define CONFIG_BOOTCOMMAND "nand read 0x22000000 0x200000 0x300000; bootm"
#define CONFIG_BOOTARGS \
"mem=64M console=ttyS0,115200 " \
"root=/dev/mtdblock5 rootfstype=cramfs"
#endif

加快网络的启动:
这里是DM9000的,取消//#define CONFIG_RESET_PHY_R,这样会加快系统启动。

/* Ethernet */
#define CONFIG_DRIVER_DM9000
#define CONFIG_DM9000_BASE 0x30000000
#define DM9000_IO CONFIG_DM9000_BASE
#define DM9000_DATA (CONFIG_DM9000_BASE + 4)
#define CONFIG_DM9000_USE_16BIT
#define CONFIG_DM9000_NO_SROM
#define CONFIG_NET_RETRY_COUNT 20
//#define CONFIG_RESET_PHY_R



内核增加NandFlash的分区。
arch/arm/mach-at91/board-sam9261ek.c

/*
 * NAND flash
 */
static struct mtd_partition __initdata ek_nand_partition[] = {
{
.name = "bootstrap",
.offset = 0,
.size = SZ_256K,
},
{
.name = "uboot",
.offset = 0x40000,
.size = SZ_256K,
},
{
.name = "env1",
.offset = 0x80000,
.size = SZ_256K,
},
{
.name = "env2",
.offset = 0xa0000,
.size = SZ_256K,
},
{
.name = "kernel",
.offset = 0x200000,
.size = SZ_2M,
},
{
.name = "rootfs",
.offset = 0x800000,
.size = MTDPART_SIZ_FULL,
},
};


RomBOOT




AT91Bootstrap 3.8.2 (Tue Feb 23 22:43:35 CST 2016)


NAND: ONFI not supported
NAND: Manufacturer ID: 0xec Chip ID: 0xf1
NAND: Disable On-Die ECC
NAND: Using Software ECC
NAND: Image: Copy 0x80000 bytes from 0x40000 to 0x21f00000
NAND: Done to load image




U-Boot 2014.04 (Feb 26 2016 - 22:17:46)


CPU: AT91SAM9261
Crystal frequency:   18.432 MHz
CPU clock        :  198.656 MHz
Master clock     :   99.328 MHz
DRAM:  64 MiB
WARNING: Caches not enabled
NAND:  128 MiB
*** Warning - bad CRC, using default environment


In:    serial
Out:   serial
Err:   serial
Net:   dm9000
Hit any key to stop autoboot:  0 


NAND read: device 0 offset 0x200000, size 0x300000
 3145728 bytes read: OK
## Booting kernel from Legacy Image at 22000000 ...
   Image Name:   Linux-2.6.26-AT91
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    1186904 Bytes = 1.1 MiB
   Load Address: 20008000
   Entry Point:  20008000
   Verifying Checksum ... OK
   Loading Kernel Image ... OK


Starting kernel ...


Uncompressing Linux.............................................................................. done, booting the kernel.
Linux version 2.6.26-AT91 (root@zhangsz) (gcc version 4.4.1 (Sourcery G++ Lite 2010q1-202) ) #6 Fri Feb 26 21:34:34 CST 2016
CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177
Machine: Atmel AT91SAM9261-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: 16384 bytes, associativity 4, 32 byte lines, 128 sets
CPU0: D cache: 16384 bytes, associativity 4, 32 byte lines, 128 sets
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 16256
Kernel command line: mem=64M console=ttyS0,115200 root=/dev/mtdblock5 rootfstype=cramfs
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: 62396KB available (2164K code, 195K data, 108K init)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
net_namespace: 192 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
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
NetWinder Floating Point Emulator V0.97 (double precision)
msgmni has been set to 121
io scheduler noop registered
io scheduler anticipatory registered (default)
atmel_usart.0: ttyS0 at MMIO 0xfefff200 (irq = 1) is a ATMEL_SERIAL
brd: module loaded
ssc ssc.1: Atmel SSC device at 0xc4810000 (irq 15)
dm9000 Ethernet Driver, V1.30
dm9000 dm9000.0: eth%d: Invalid ethernet MAC address. Please set using ifconfig
eth0: dm9000 at c480c000,c480e044 IRQ 107 MAC: 00:00:00:00:00:00 (chip)
Driver 'sd' needs updating - please use bus_type methods
NAND device: Manufacturer ID: 0xec, Chip ID: 0xf1 (Samsung NAND 128MiB 3,3V 8-bit)
Scanning device for bad blocks
Bad eraseblock 446 at 0x037c0000
Bad eraseblock 994 at 0x07c40000
Creating 6 MTD partitions on "at91_nand":
0x00000000-0x00040000 : "bootstrap"
0x00040000-0x00080000 : "uboot"
0x00080000-0x000c0000 : "env1"
0x000a0000-0x000e0000 : "env2"
0x00200000-0x00400000 : "kernel"
0x00800000-0x08000000 : "rootfs"
atmel_spi atmel_spi.0: Atmel SPI Controller at 0xfffc8000 (irq 12)
usbmon: debugfs is not available
at91_ohci at91_ohci: AT91 OHCI
at91_ohci at91_ohci: new USB bus registered, assigned bus number 1
at91_ohci at91_ohci: irq 20, io mem 0x00500000
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.
udc: at91_udc version 3 May 2006
mice: PS/2 mouse device common for all mice
input: gpio-keys as /class/input/input0
ads7846 spi0.2: touchscreen, irq 29
input: ADS784x Touchscreen as /class/input/input1
rtc-at91sam9 at91_rtt.0: rtc core: registered at91_rtt as rtc0
rtc-at91sam9 at91_rtt.0: rtc0: SET TIME!
i2c /dev entries driver
i2c-gpio i2c-gpio: using pins 39 (SDA) and 40 (SCL)
Registered led device: ds7
Registered led device: ds8
Registered led device: ds1
TCP cubic registered
NET: Registered protocol family 17
rtc-at91sam9 at91_rtt.0: hctosys: unable to read the hardware clock
VFS: Mounted root (cramfs filesystem) readonly.
Freeing init memory: 108K
#-----Start /etc/init.d/rcS 
mkdir: cannot create directory '/var/lock': Read-only file system
------------*******AT91SAM9261EK-Linux 2016-02-26***********------------
ifconfig: SIOCSIFFLAGS: Cannot assign requested address


AT91 login: root
Password: 
login[774]: root login on 'ttyS0'
[root@AT91 /]# ls
bin      dev      home     linuxrc  proc     sbin     tmp      var
boot     etc      lib      mnt      root     sys      usr
[root@AT91 /]# cd home/
[root@AT91 /home]# ls
[root@AT91 /home]# cd ..
[root@AT91 /]# l
-sh: l: not found
[root@AT91 /]# ls
bin      dev      home     linuxrc  proc     sbin     tmp      var
boot     etc      lib      mnt      root     sys      usr
[root@AT91 /]#



         以上是重新上电运行的信息,这个cramfs是只读的文件系统,因此只能测试一下,还需要进一步使用yaffs2 jffs2 ubi等可以写的nandflash文件系统。

         总结:有了一步,就有以后的千千万万步,不能被眼前的小沙子挡住去路。如果前面有墙,找不到出口,我们就要拆墙,打开出口。才能见到更大的外面的世界!
阅读(2318) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~