您的位置:首页 > 运维架构 > Linux

u-boot1.1.6以及linux和文件系统在fs2410上的移植

2009-12-29 19:54 471 查看
第一次接触u-boot移植,菜鸟一个,啥都不懂得,在网上转了很久,决定还是先借鉴一下被人的经验吧!!!我参考的文章是

http://www.diybl.com/course/6_system/linux/Linuxjs/2008727/134020_2.html,这个文章对我来说,真是不错,改动的东西比较少,我喜欢,^_^,对于这篇文章,我想说明几点的是:在部分(一)的第五步当中,我没有改写我自己的lowlevel_init.S代码,原文中#define B1_BWSCON (DW16)
应该为#define B1_BWSCON (DW32)的。其它部分,我就几乎没有改动,这样下去应该会很顺利的,到部分(三)的制作uImage这部分,我为了省事,暂时从网上找了个能用的zImage,然后直接mkimage一下,不过我设定的Load Address为0x30008000,入口地址为:0x30008040。好,到这一部,linux内核应该是没问题了,别急,我们还得找一个文件系统,^_^,我还是找别人的,因为我现在就是要测试u-boot的。

接下来就是烧写的,不幸的是,我只有一根串口线,别的啥也没有,不过好的一点是,我的fs2410里面有一个能用的其他的bootloader,咱就暂且用这个bootloader下载一下我自己的u-boot吧,等到u-boot下载进去后,我直接将之写到block 0,好了,断掉fs2410的电源,并且短接fs2410上的两个我也不知道名字的引脚(等我查查他们的名字,我再补上来,不过我知道他们的用途的---设置启动方式用的),并接通电源,还不错,u-boot能用,接下来,我直接将linux内核下载到位置30008000,并设置启动变量,最后bootm 30008000下,结果,却出现了如下的信息:

Booting image at 30008000 ...
Image Name: linux2.6.14
Created: 2008-12-30 14:07:53 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1008456 Bytes = 984.8 kB
Load Address: 30008000
Entry Point: 30008040
Verifying Checksum ... OK
XIP Kernel Image ... OK

Starting kernel ...

Uncompressing Linux................................................................... done, booting the kernel.
Linux version 2.6.14.1 (root@localhost.localdomain) (gcc version 3.4.1) #2 Tue Dec 30 22:02:10 CST 2008
CPU: ARM920Tid(wb) [41129200] revision 0 (ARMv4T)
Machine: SMDK2410
Memory policy: ECC disabled, Data cache writeback
CPU S3C2410A (id 0x32410002)
S3C2410: core 200.000 MHz, memory 100.000 MHz, peripheral 50.000 MHz
S3C2410 Clocks, (c) 2004 Simtec Electronics
CLOCK: Slow mode (1.500 MHz), fast, MPLL on, UPLL on
CPU0: D VIVT write-back cache
CPU0: I cache: 16384 bytes, associativity 64, 32 byte lines, 8 sets
CPU0: D cache: 16384 bytes, associativity 64, 32 byte lines, 8 sets
Built 1 zonelists
Kernel command line: root=1f02 init=/linuxrc console=ttySAC0,115200 devfs=mount
irq: clearing subpending status 00000002
PID hash table entries: 512 (order: 9, 8192 bytes)
timer tcon=00500000, tcnt a2c1, tcfg 00000200,00000000, usec 00001eb8
Console: colour dummy device 80x30
Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
Memory: 64MB = 64MB total
Memory: 62720KB available (1671K code, 375K data, 92K init)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
softlockup thread 0 started up.
NET: Registered protocol family 16
S3C2410: Initialising architecture
S3C2410 DMA Driver, (c) 2003-2004 Simtec Electronics
DMA channel 0 at c4800000, irq 33
DMA channel 1 at c4800040, irq 34
DMA channel 2 at c4800080, irq 35
DMA channel 3 at c48000c0, irq 36
NetWinder Floating Point Emulator V0.97 (double precision)
devfs: 2004-01-31 Richard Gooch (rgooch@atnf.csiro.au)
devfs: boot_options: 0x1
Console: switching to colour frame buffer device 80x25
fb0: Virtual frame buffer device, using 1024K of video memory
S3C2410 RTC, (c) 2004 Simtec Electronics
s3c2410_serial0 at MMIO 0x50000000 (irq = 70) is a S3C2410
s3c2410_serial1 at MMIO 0x50004000 (irq = 73) is a S3C2410
s3c2410_serial2 at MMIO 0x50008000 (irq = 76) is a S3C2410
io scheduler noop registered
io scheduler anticipatory registered
io scheduler deadline registered
io scheduler cfq registered
RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize
S3C24XX NAND Driver, (c) 2004 Simtec Electronics
s3c2410-nand: mapped registers at c4980000
s3c2410-nand: timing: Tacls 10ns, Twrph0 40ns, Twrph1 10ns
NAND device: Manufacturer ID: 0xec, Chip ID: 0x76 (Samsung NAND 64MiB 3,3V 8-bit)
NAND_ECC_NONE selected by board driver. This is not recommended !!
Scanning device for bad blocks
Bad eraseblock 3653 at 0x03914000
Creating 4 MTD partitions on "NAND 64MiB 3,3V 8-bit":
0x00000000-0x00040000 : "u-boot"
0x00040000-0x00200000 : "kernel"
0x00200000-0x02000000 : "root file system"
0x02000000-0x04000000 : "wince"
mice: PS/2 mouse device common for all mice
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 4096 (order: 2, 16384 bytes)
TCP bind hash table entries: 4096 (order: 2, 16384 bytes)
TCP: Hash tables configured (established 4096 bind 4096)
TCP reno registered
TCP bic registered
NET: Registered protocol family 1
Reading data from NAND FLASH without ECC is not recommended
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,2)

真是见鬼,网上查了下,应该是缺少文件系统的原因造成的,可网上很多的移植都是利用tftp来完成的,我的fs2410没网卡的,没办法,我是不能使用tftp命令下载的了,

然后就是一番艰苦卓绝的查阅资料的过程,最后,终于有解决方法了(其实我下载Linux内核就是用的这个新方法,前面忘记说明了,也就在这里补充吧),从网上下载一个C-kermit,至于其安装方式,我就不啰嗦了,网上多的是,我试验过,大部分是可以用的。

根据前面对nand flash空间的分配,我应该将文件系统写到200000开始的地址空间中的,但首先我得把文件系统下载到arm中去,于是有了下面的步骤:

在Shell中打入Kermit,进入Kermit,当然,这之前串口线是要连接上fs2410的,进入Kermit后,输入字母“C”,然后Enter下,就进入了U-boot模式下了,然后敲入loadb 30008000(文件的下载地址),再按下Ctrl+/,按下C,进入Kermit模式,这样就可以用Send+文件名传输文件了,好,等文件传输完毕(比较慢的,串口传输)。还要把文件写到200000地址的,命令如下(在U-boot模式下):nand erase 200000(分配给文件的开始地址) 1e00000(分配给文件系统的空间大小),这一部其实是擦除这部分空间上书所有数据,接下来就是写:nand write 30008000(文件的存放开始位置) 200000 1e00000.好了,这样过后,文件系统算是有了(由于我的文件系统式做实验用的,很小,太大的话我串口传输的话我不等的发疯才怪呢),接下来烧写linux内核,别的我不多说了,命令如下: U-boot模式下Loadb 30008000,Kermit模式下send+内核名称(要加上完整路径的),然后:在U-boot模式下setenv bootcmd nand read 0x30008000(内核的下载地址) 0x40000(为内核分配的开始地址) 0x1c0000(为内核分配的空间大小)/;bootm 0x30008000

最后saveenv下,

最后的最后,reset下,^_^,我的内核启动了,当然了,这个过程当中我还碰到了很多头痛的问题,大部分问题都是跟地址设置有关的。工作暂时告一段落,这一周我都累死了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: