打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
vivi下如何通过nfs来挂载文件系统全过程

这几天一直在尝试用vivi来使拿到手的SBC-2410X重新复活,结果问题总是不断,解决了一个.下一步又会出现新的问题,最苦于没有什么高手可以指导,完全靠自己在网上google,本来有个华工的同学一直在搞ARM,但是毕竟不能亲临现场指导,只能通过QQ联系,这样很多东西都说不清楚的,所以实际上也不能帮我解决碰到的种种问题.虽然手上有SBC-2410X手册,但是按照上面的步骤来做也是问题多多,心情很是郁闷,不过google多了也查到了大部分关于如何通过vivi来引导内核要注意的一些问题,下面就把这些天所作的工作总结一下:
1.编译vivi
    首先,进入vivi源代码目录:
#cd /root/SBC2410/vivi
清除以前编译产生的文件
#make clean
开始配置
#make menuconfig
因为我用的是板子光盘自带的vivi,所以不需要手工选择配置它,只需要装载一个缺省的配置文件即可,使用这个配置文件的vivi正好适合于这个目标板.选择"Load an Alternate Configuration File",填上"arch/def-configs/SBC-2410X",保存该设置后,
#make
执行这一步之前首先要保证装好了交叉编译器,并进行了声明:export PATH=$PATH:/usr/local/arm/2.95.3/bin,要不然会提示找不到编译器.如果编译过程顺利,将会在当前目录下生成vivi二进制映象文件.

2.配置和编译kernel(2.4.18)
    SBC-2410X所用的内核源代码在光盘里都有,像vivi一样,首先进入内核目录:
#cd /root/SBC2410/kernel
#make clean
#make menuconfig
这一步注意要跟vivi一样装载一个目标板的配置文件(arch/arm/sbc2410_samsung3503),开始我按照手册上的步骤来作,手册上说不需要改动任何地方,退出保存后直接make就行了,我就是被这个误导了,结果总是出现下面的问题:
......
......
fs/fs.o(.text+0x1c2e8): undefined reference to
`cpu_CPU_NAME_icache_invalidate_range'
fs/fs.o: In function `load_aout_interp':
fs/fs.o(.text+0x1cec8): undefined reference to
`cpu_CPU_NAME_icache_invalidate_range'
fs/fs.o: In function `elf_core_dump':
fs/fs.o(.text+0x1e5f8): undefined reference to
`cpu_CPU_NAME_cache_clean_invalidate_range'
fs/fs.o(.text+0x1e638): undefined reference to `cpu_CPU_NAME_flush_ram_page'
fs/fs.o: In function `statm_pgd_range':
fs/fs.o(.text+0x21a70): undefined reference to `cpu_CPU_NAME_set_pmd'
fs/fs.o: In function `nfs_readpage_sync':
fs/fs.o(.text+0x31abc): undefined reference to
`cpu_CPU_NAME_cache_clean_invalidate_range'
fs/fs.o: In function `nfs_readpage_result':
fs/fs.o(.text+0x322b8): undefined reference to
`cpu_CPU_NAME_cache_clean_invalidate_range'
fs/fs.o: In function `romfs_readpage':
fs/fs.o(.text+0x3bb04): undefined reference to
`cpu_CPU_NAME_cache_clean_invalidate_range'
drivers/block/block.o: In function `ramdisk_updatepage':
drivers/block/block.o(.text+0x2840): undefined reference to
`cpu_CPU_NAME_cache_clean_invalidate_range'
drivers/block/block.o: In function `rd_blkdev_pagecache_IO':
drivers/block/block.o(.text+0x29f8): undefined reference to
`cpu_CPU_NAME_cache_clean_invalidate_range'
make: *** [vmlinux] Error 1
这个问题的出现就是因为没有装载一个正确的配置文件.
装载好配置文件arch/arm/sbc2410_samsung3503后,保存就可以进行下面的操作了:
#make dep
#make zImage
最后生成的内核映象文件zImage位于arch/arm/boot目录.

3.使用JTAG接口下载vivi
    使用JTAG接口下载程序需要一条JTAG电缆和一个Jflash烧写程序.把JTAG电缆连接SBC-2410X和主机的并口.Jflash及其用法自带光盘里都有.进入Jflash目录
#cd /root/SBC2410/Jflash
执行以下命令可以查看Jflash的使用方法:
#./Jflash-s3c2410 --help
内容如下:
+------------------------------------+
    SEC JTAG FLASH(SJF) v 0.11     +
    modified by MIZI 2002.7.13     +
+------------------------------------+
Usage: SJF <filename> /t=<flash_type> /d=<delay>
Flash Type List
  1:SMDK2410:K9S3208 4MB
  2:SMDK2410:K9S6408 8MB
  3:SMDK2410:K9S2808 16MB
  4:SMDK2410:K9S5608 32MB
  5:SMDK2410:K9S1208 64MB
  6:SMDK2410:K9S2G08 256MB
  7:SMDK2410:AM29LV800BB
对应不同的Flash,Jflash程序使用不同的选项参数,因为SBC-2410X使用的是64M三星Nand
Flash,因此使用"/t=5".把vivi映象文件放在此目录下,并打开目标板电源,执行以下命令则产生相应的提示,按提示进行操作(一般是两次选0的操作开始下载vivi,烧写完后选2退出)
#./Jflash-s3c2410 vivi /t=5
当vivi烧入Flash,并能正常启动,就可以使用vivi命令来下载内核了.

4.使用vivi下载内核(2.4.18)
   打开minicom(minicom提前要配置好,我这里也是按说明书进行的配置,但我查过许多产品的,这里的配置是一样应该是VIVI开发商统一了。115200 8N1 无硬件握手,还有一点请留心,就是minicom默认的是ttyS1(串口2),而我们的PC一般接的是ttyS0(串口1))
#minicom
minicom配置好之后,则可以启动目标板,不过因为SBC-2410X附带的vivi启动等待时间很短,因此请按下空格键,然后打开电源开关,进入vivi命令提示符下再松开空格键.内容如下:
VIVI version 0.1.4 (root@localhost.localdomain) (gcc version 2.95.3 20010315
(r8MMU table base address = 0x33DFC000
Succeed memory mapping.
NAND device: Manufacture ID: 0xec, Chip ID: 0x76 (Samsung K9D1208V0M)
Found saved vivi parameters.
Press Return to start the LINUX now, any other key for vivi
type "help" for help.
frinedly-arm>

执行"load flash kernel x"命令可以下载内核,该命令的解释如下:
load -vivi的下载命令
flash -把文件下载到flash中
kernel -要下载的文件是kernel类型,和分区参数同名
x -使用xmdoem协议下载
执行该命令后立即按下"Ctrl"和"a"键,松开后再按下"s"键,进入下载模式,选择xmodem协议方式下载,接着输入或选择要传输的文件(用上下方向键移动,用SPACE来选择,最好将文件拷到root目录下,当然也可以通过minicom的路径设置来改变默认打开的文件夹
注:如果提示“ACK :Get xxxx
xxxxxx”,则是已经发生连接时了,可以在vivi下使用param set xmodeminitial_timeout
2000000和param set xmodem_timeout
3000000来设置xmodem的初始化时间和等待超时时间就可以了。(其实关键作用的是xmodem_timeout,把它设置为0就不会超时了,我是这么做的)设置完成后用param save命令保存即可.

发送文件结束后,vivi将自动保存所下载的文件到flash中.此时如果输入"boot"命令,vivi将会启动刚刚下载的内核,但是无法进入系统,因为还没有文件系统.

5.通过nfs挂载文件系统
1)首先准备好一个文件系统作为网络文件系统(nfs)的root目录.在附带的光盘里有几个已经制作好的文件系统可以供我们使用(root_default,root_qtopia_mouse,root_qtopia_tp);
2)设定网络文件系统共享目录
#vi /etc/exports
打开exports,在其中填上你要共享的目录路径,例如:
/root/root_qtopia_tp       *(rw,sync,no_root_squash)
这表示将/root/root_qtopia_tp目录作为nfs文件系统输出,*表示允许所有的IP访问,rw表示具有可擦写的权限,sync表示文件同步写入到内存和硬盘当中,no_root_squash表示如果登录共享目录的使用者是root的话,那么他对于这个目录具有root的权限.
3)启动nfs服务
#/etc/init.d/nfs restart  或者
#service nfs restart
4)在vivi提示符下设置nfs启动参数
frinedly-arm>param set linux_cmd_line "console=ttyS0 root=/dev/nfs nfsroot=192.168.0.29:/root/SBC2410/root_qtopia_tp ip=192.168.0.32:192.168.0.1:192.168.0.1:255.255.255.0:matrix4.arm9.net:eth0:off"
frinedly-arm>param save
其中nfsroot很好理解,它指的是你在局域网中的PC主机IP及NFS共享目录
ip的第一项是目标板的临时IP(不要与局域网内其它IP冲突),
第二项是boot server的IP(实际应用中发现好象没什么用)
第三项是目标板上的GW网关设置
第四项是掩码,
第五项是主机名,
第六项是网卡eth0,off的参数不知道是什么意思,但对整个启动应该没什么大的影响。
在网上查到的vivi下nfs启动参数的设置差不多就这么多,书上和网上都说这样设置好后,输入boot即可挂载文件系统,但是我却遇到了问题,以下是我vivi启动信息:
VIVI version 0.1.4 (root@localhost.localdomain) (gcc version 2.95.3 20010315
(r8MMU table base address = 0x33DFC000
Succeed memory mapping.
NAND device: Manufacture ID: 0xec, Chip ID: 0x76 (Samsung K9D1208V0M)
Found saved vivi parameters.
Press Return to start the LINUX now, any other key for vivi
Copy linux kernel from 0x00030000 to 0x30008000, size = 0x00200000 ... done
zImage magic = 0x016f2818
Setup linux parameters at 0x30000100
linux command line is: "console=ttyS0 root=/dev/nfs
nfsroot=192.168.0.29:/root/"MACH_TYPE = 193
NOW, Booting Linux......
Uncompressing
Linux.............................................................Linux
version 2.4.18-rmk7-pxa1 (root@localhost.localdomain) (gcc version 2.95.38CPU:
ARM/CIRRUS Arm920Tsid(wb) revision 0
Machine: Samsung-SMDK2410
On node 0 totalpages: 16384
zone(0): 16384 pages.
zone(1): 0 pages.
zone(2): 0 pages.
Kernel command line: console=ttyS0 root=/dev/nfs
nfsroot=192.168.0.29:/root/roofDEBUG: timer count 15626
Console: colour dummy device 80x30
Calibrating delay loop... 99.94 BogoMIPS
Memory: 64MB = 64MB total
Memory: 62448KB available (1508K code, 415K data, 92K init)
Dentry-cache hash table entries: 8192 (order: 4, 65536 bytes)
Inode-cache hash table entries: 4096 (order: 3, 32768 bytes)
Mount-cache hash table entries: 1024 (order: 1, 8192 bytes)
Buffer-cache hash table entries: 4096 (order: 2, 16384 bytes)
Page-cache hash table entries: 16384 (order: 4, 65536 bytes)
POSIX conformance testing by UNIFIX
Linux NET4.0 for Linux 2.4
Based upon Swansea University Computer Society NET3.039
Initializing RT netlink socket
CPU clock = 200.000 Mhz, HCLK = 100.000 Mhz, PCLK = 50.000 Mhz
Initializing S3C2410 buffer pool for DMA workaround
usbctl: zombie --> [reset] --> default. Device in default state.
S3C2410 USB Controller Core Initialized
USB Function Character Driver Interface - 0.5, (C) 2001, Extenex Corp.
usbctl: Opened for usb-char
usbctl: Started for usb-char
Starting kswapd
devfs: v1.10 (20020120) Richard Gooch (rgooch@atnf.csiro.au)
devfs: boot_options: 0x1
ttyS%d0 at I/O 0x50000000 (irq = 52) is a S3C2410
ttyS%d1 at I/O 0x50004000 (irq = 55) is a S3C2410
ttyS%d2 at I/O 0x50008000 (irq = 58) is a S3C2410
SAMSUNG LTV350QV 35IN LCD TEST.
Samsung 320x240 LCD
Samsung 320x240 LCD
Console: switching to colour frame buffer device 40x30
Installed S3C2410 frame buffer
pty: 256 Unix98 ptys configured
leds initialized
touchpanel: installed
S3C2410 Real Time Clock Driver v0.1
block: 128 slots per queue, batch=32
Uniform Multi-Platform E-IDE driver Revision: 6.31
ide: Assuming 50MHz system bus speed for PIO modes; override with idebus=xx
eth0: cs8900 rev K(3.3 Volts) found at 0xd0000300
cs89x0 media RJ-45, IRQ 37
Linux video capture interface: v1.00
SCSI subsystem driver Revision: 1.00
scsi0 : SCSI host adapter emulation for IDE ATAPI devices
UDA1341 audio driver initialized
NAND device: Manufacture ID: 0xec, Chip ID: 0x76 (Samsung K9D1208V0M)
bon:cannot find partition table
usb.c: registered new driver usbdevfs
usb.c: registered new driver hub
usb-ohci.c: USB OHCI at membase 0xe9000000, IRQ 26
usb.c: new USB bus registered, assigned bus number 1
hub.c: USB hub found
port #1 suspened!
port #0 alived!
hub.c: 1 port detected
usb.c: registered new driver usblp
printer.c: v0.8:USB Printer Device Class driver
usb.c: registered new driver ov511
ov511.c: v1.48a for Linux 2.4 : OV511 USB Camera Driver
usb.c: registered new driver serial
usbserial.c: USB Serial support registered for Generic
usbserial.c: USB Serial Driver core v1.4
Initializing USB Mass Storage driver...
usb.c: registered new driver usb-storage
USB Mass Storage support registered.
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP, IGMP
IP: routing cache hash table of 512 buckets, 4Kbytes
TCP: Hash tables configured (established 4096 bind 4096)
IP-Config: Complete:
      device=eth0, addr=192.168.0.32, mask=255.255.255.0, gw=192.168.0.1,
     host=matrix4, domain=, nis-domain=arm9.net,
     bootserver=192.168.0.1, rootserver=192.168.0.29, rootpath=
NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
NetWinder Floating Point Emulator V0.95 (c) 1998-1999 Rebel.com
Looking up port of RPC 100003/2 on 192.168.0.29
Looking up port of RPC 100005/1 on 192.168.0.29
VFS: Mounted root (nfs filesystem).
Mounted devfs on /dev
Freeing init memory: 92K
RPC: sendmsg returned error 101
nfs: RPC call returned error 101
/etc/init.d/rcS: /etc/init.d/rcS: 47: /bin/qtopiR: Network is unreachable
PC: sendmsg returned error 101
nfs: RPC call returned error 101
/etc/init.d/rcS:R/etc/init.d/rcSP 49: /bin/hostnCme: Network is unreachable
: sendmsg returned error 101
nfs: RPC call returned error 101
RPC: sendmsg returned error 101
nfs: RPC call returned error 101
RPC: sendmsg returned error 101
nfs: RPC call returned error 101
RPC: sendmsg returned error 101
nfs: RPC call returned error 101
RPC: sendmsg returned error 101
nfs: RPC call returned error 101
RPC: sendmsg returned error 101
nfs: RPC call returned error 101
RPC: sendmsg returned error 101
nfs: RPC call returned error 101
这种问题又困扰了我几天,也问了师兄和网友,但最终还是没有解决,弄得我又郁闷了好几天,也怪我啥都不懂,根本不知道去分析错误的原因,郁闷了几天,今天上午突然想到去看一下启动的过程,看是什么地方开始出现的问题,就是下面这句信息让我找到了希望
/etc/init.d/rcS: /etc/init.d/rcS: 47: /bin/qtopiR: Network is unreachable
其实我当时也是不抱希望去看一看这个文件的,打开一看,发现文件系统里这个文件里也有我目标板的IP定义,而这个IP跟我在vivi下设置的并不一致,我尝试着把这个文件里定义的IP改成和我开始设置的一样,如下:
/sbin/ifconfig eth0 192.168.0.32 up
终于大功告成!文件系统可以正确的挂载了.

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
USB摄像头(中星微ZC301)驱动程序的移植
mini2440 uboot使用nfs方式引导内核,文件系统
nfs挂载错误wrong fs type, bad option, bad superblock
u-boo-1.3+linux 2.6.24+NFS移植(FS2410)
详解制作根文件系统
hwinfo命令
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服