nfs启动yaffs2根文件系统-ok6410
- 格式:docx
- 大小:14.93 KB
- 文档页数:2
OK6410、2.6.36内核移植,dm9000 驱动移植,详细!分类:嵌入式学习Linux学习2012-04-27 00:54 3004人阅读评论(7) 收藏举报interfaceccompressionresourcesstructtable还是先来吐槽:本来我是在上一个星期的周末已经把Linux2.6.34.11 的驱动已经成功的移植到,OK6410 的开发板上的,并且能够启动主机上的NFS 根文件系统,可是我在周一的时候,开始学习LCD 的驱动程序,在修改内核文件的时候,有几处错误修改,将原来自己做的2.6.34.11 的内核源码搞的乱七八糟的,在这里还是自己在修改内核的时候没有提注重注释,并且没有记录下来自己的操作步骤,以至于我没办法,恢复2.6.34 的内核,所以也就只能重新先开始最基础的内核移植了。
这次我选择的是2.6.36.2 的内核,谁知到一开始移植就出现一大堆问题。
在这里我不得不说,飞凌开发人员对内核修改的代码,管理真的是太扯了,自己在注销任何一个设备是没有一点点注释,就把这个设备原有的线性地址分配给其它设备了,让我让我们这些菜鸟干看着一大堆的报错信息顶个什么用,真的是伤不起。
好了不乱扯了,现在开始记录。
我的开发环境是:VMware Ubuntu 10.10 。
OK6410 A版256M+2G 的开发板。
主机系统:XP。
Uboot:飞凌提供的Uboot。
参考内核:飞凌提供的Forlinx 的2.6.36.2 内核操作步骤以下./ 均代表你的内核根目录1、修改./Makefile191 ARCH ?=arm // 指定cpu类型,arm后面不要有空格,要不然编译是会提醒ARCH 不能为一个目录192 CROSS_COMPILE ?=/usr/local/arm/4.2.2-eabi/usr/bin/arm-linux- // 指定交叉编译器的路径,按照你自己的进行指定路径2、先来说说nand flash 的驱动涉及到的文件:MTD 通用nand flash 驱动程序位置:./drivers/mtd/nand/.nand_base.cNAND Flash 的platform 设备信息: ./drivers/mtd/nand/s3c_nand.c有了上面的依赖驱动依赖程序、接下来修改./arch/arm/mach-s3c64xx/mach-smdk6410.c 1) nandflash 驱动,修改方法加载头文件[cpp]view plaincopyprint?1.#include <linux/mtd/mtd.h>2.#include <linux/mtd/partitions.h>3.#include <plat/nand.h> //这些头文件放在./arch/arm/plat-samsung/include/ 下面添加nand 结构体[cpp]view plaincopyprint?1.// add by acanoe first2.extern void s3c64xx_reserve_bootmem(void); //add by acanoe3.4.5.struct mtd_partition ok6410_nand_part[] = {6. {7. .name = "Bootloader",8. .offset = 0,9. .size = (1 * SZ_1M),10. .mask_flags = MTD_CAP_NANDFLASH,11. },12. {13. .name = "Kernel",14. .offset = (1 * SZ_1M),15. .size = (5*SZ_1M) ,16. .mask_flags = MTD_CAP_NANDFLASH,17. },18. {19. .name = "User",20. .offset = (6 * SZ_1M),21. .size = (120*SZ_1M) ,22. },23. {24. .name = "File System",25. .offset = MTDPART_OFS_APPEND,26. .size = MTDPART_SIZ_FULL,27. }28.};29.30.31.static struct s3c2410_nand_set ok6410_nand_sets[] = {32. [0] = {33. .name = "nand",34. .nr_chips = 1,35. .nr_partitions = ARRAY_SIZE(ok6410_nand_part),36. .partitions = ok6410_nand_part,37. },38.};39.40.41.static struct s3c2410_platform_nand ok6410_nand_info = {42. .tacls = 25,43. .twrph0 = 55,44. .twrph1 = 40,45. .nr_sets = ARRAY_SIZE(ok6410_nand_sets),46. .sets = ok6410_nand_sets,47.};48.//add by acanoe first修改 smdk6410_devices[] __initdata = {对照这个结构体将那些进行修改,注意 by acanoe 的语句为修改重点。
Linux下配置网路文件系统NFS1 .3.4 配置网络文件系统NFS 服务使用本开发板做开发,NFS 服务并不是必须的,因为NFS 主要是用于通过网络远程共享文件,我们使用常见的ftp 或者SD卡,基本上也可以达到同样的目的。
NFS 服务对于没有接触过Linux 的人来讲可能比较难以理解,另外,每个人的网络环境也不尽相同,因此设置和使用并没有严格的标准,这就导致初学者比较难以掌握,所以我们并不推荐使用,在此提供的步骤仅供参考;事实上,网络上有很多爱好者根据自己的情况记录了经验总结,你也可以自己搜索看看,关键词是“mini2440 nfs”,它们都是大同小异的,并且可以适用于6410系统。
Step1:设置共享目录以root 身份登录Fedora9,在命令行运行:#gedit /etc/exports编辑nfs服务的配置文件( 注意:第一次打开时该文件是空的) ,添加以下内容:/opt/FriendlyARM/mini 6410/ linux/ root_qtopia _qt4 *(rw,sync,no_root_squash)其中:/opt/FriendlyARM/mini6410/ linux/ root_qtopia _qt4 表示将要共享的的目录,它可以作为开发板的根文件系统通过nfs挂接;* 表示所有的客户机都可以挂接此目录rw 表示挂接此目录的客户机对该目录有读写的权力no_root_squash 表示允许挂接此目录的客户机享有该主机的root 身份说明:实际上该目录目前尚不存在,执行完 4.4章节的内容之后才会有,在此只是先设置它。
Step2: 启动NFS 服务可以通过命令行和图形界面两种方式启动NFS 服务,我们建立NFS 服务的目的是通过网络对外提供目录共享服务,但默认安装的Fedora 系统开启了防火墙,这会导致NFS 服务无法正常使用。
因此先关闭防火墙,在命令行输入“lokkit ”命令,打开防火期设置界面:选择其中(*)Disabled ,然后选择“OK”退出,这样就永久的关闭了防火墙。
NFS(Network File System)是一种分布式文件系统,它允许网络上的客户端访问和操作服务器上的文件,就像在本地操作一样。
NFS的主要用途是通过计算机网络共享文件系统,方便用户在不同的机器上访问和操作同一套文件。
NFS的用法相对简单,以下是其基本用法:1.安装NFS服务器和客户端:首先需要在服务器和客户端上安装NFS软件包。
对于大多数Linux发行版,可以使用系统的包管理器来安装。
例如,在基于Debian的系统上,可以使用apt-get install nfs-kernel-server命令来安装NFS服务器软件包,使用apt-get install nfs-common命令来安装NFS客户端软件包。
2.配置NFS服务器:在服务器上,需要配置NFS共享的目录。
通常在NFS服务器的配置文件/etc/exports中指定要共享的目录和访问权限。
例如,/mnt/share *(rw,sync,no_root_squash)表示将/mnt/share目录以读写方式共享给所有客户端。
3.启动NFS服务:配置完成后,需要启动NFS服务。
在大多数Linux发行版上,可以使用/etc/init.d/nfs-kernel-server start命令来启动NFS服务。
4.挂载NFS共享目录:在客户端上,需要将NFS共享目录挂载到本地文件系统上。
可以使用mount -t nfs server:/path/to/share /mnt/nfs命令来挂载NFS共享目录。
其中,server:/path/to/share是NFS服务器的共享路径,/mnt/nfs是本地挂载点。
5.使用NFS共享目录:一旦挂载成功,客户端就可以像操作本地文件一样使用NFS共享目录了。
需要注意的是,使用NFS需要在服务器和客户端之间建立信任关系,通常需要配置防火墙和SELinux等安全机制来保护NFS服务的正常运行。
此外,还需要根据实际需求调整NFS的配置参数,以满足特定的性能和安全性要求。
使用NFS挂载根文件系统,在开发阶段有很多的好处,对根文件系统进行修改后不用每次都下载到NandFlash中,可以把制作的根文件系统放到主机中的NFS输出目录中,在正式成为产品以后在烧写到开发板中,这样可以方便很多,也可以把编译天生的内核也放到NFS 输出目录中这样也可以引导内核,很是方便,还等什么开始吧!NFS服务器真个配置已经在上一篇文章中写到过了。
U-boot中使用tftp协议也在另一篇文章中。
按道理来说NFS命令也是可以是使用的,由于都是基于网卡的,只要网卡驱动移植的没有题目,NFS也就直接可以使用了,不过在我这里可是行不通,在使用NFS传输文件中,一直出现下面的错误类型,提示挂载不上:U-Boot@mini2440]#nfs 0x 10.27.10.48:/home/ubuntu/kernel/fs/u-boot.bindm9000 i/o: 0x, id: 0xa46DM9000: running in 16 bit modeMAC: 08:00:3e:26:0a:5boperating at 100M full duplex modeUsing dm9000 deviceFile transfer via NFS from server 10.27.10.48; our IP address is 10.27.10.23Filename '/home/ubuntu/kernel/fs/u-boot.bin'.Load address: 0xLoading: *** ERROR: Cannot mount //仅仅提示挂载不上可还有下面的错误:[U-Boot@mini2440]#nfs 0x 10.27.10.48:/home/ubuntu/kernel/fs/u-boot.bindm9000 i/o: 0x, id: 0xa46DM9000: running in 16 bit modeMAC: 08:00:3e:26:0a:5boperating at 100M full duplex modeUsing dm9000 deviceFile transfer via NFS from server 10.27.10.48; our IP address is 10.27.10.23Filename '/home/ubuntu/kernel/fs/u-boot.bin'.Load address: 0xLoading: *** ERROR: Cannot mount*** ERROR: Cannot umount //这里还提示了不能卸载在网上查找资料,出现Cannot umount错误的解决方法是修改u-boot-2009.08/net/nfs.c 文件,在大约453行四周的位置:static intnfs_umountall_reply (uchar *pkt, unsigned len){struct rpc_t rpc_pkt;debug("%s\n", __func__);memcpy ((unsigned char *)&rpc_pkt, pkt, len);//if (ntohl(rpc_pkt.u.reply.id) != rpc_id) //原来的这一行修改成下面的一行if ((ntohl(rpc_pkt.u.reply.id)+1) != rpc_id)return -1;if (rpc_pkt.u.reply.rstatus ||..................}可是在我这里修改完以后还是不可以使用,一样出现上面的错误。
Yaffs2文件系统移植到mini2440现在大部分开发板都可以支持yaffs2 文件系统,它是专门针对嵌入式设备,特别是使用nand flash作为存储器的嵌入式设备而创建的一种文件系统,早先的yaffs仅支持小页(512byte/page)的nand flash,使用yaffs2 就可以支持大页的nand flash。
所谓的根文件系统,就是创建各个目录,并且在里面创建各种文件,比如在/bin,/sbin/目录下存放各种可执行的程序,在/etc目录下存放配置文件,在/lib目录下存放库文件,下面就开始文件系统的移植。
一、准备工作1.Yaffs2源代码的获取在bbb:///node/346可以下载到最新的yaffs2 源代码,如果使用git工具,在命令行输入:就可以下载到yaffs2的源代码,到当前目录下。
2.下载Busybox-1.13.3可以从bbb:///downloads/下载Busybox-1.13.3。
3.下载Yaffs2的整理工具可以到友善之臂的网站下载,mkyaffs2image.tgz,其中解压出来有两个可执行的文件,一个是针对小页的,一个是针对NandFlash大页的,其名字为mkyaffs2image-128M,一开始在这里犯了错误,我的NandFlash是128MB的,可以按照网上用的是mkyaffs2image文件,所以老是出来假坏块的提示,仔细一分析,NandFlash不可能一下子出来这么多的坏块,而且我用他们公司提供的根文件系统却没有任何的问题,所以问题处在了整理Yaffs2的工具上面。
因为这两种大小NandFlash的ECC校验是不一样的,也就是spare区的大小是不一样的,造成了ECC校验出错。
4.链接库整理根文件系统时,要使用到链接库,这里直接使用友善之臂根文件系统中的链接库。
从网站下载root_qtopia.tgz。
使用lib目录下的链接库。
5.给内核打上YAffs2补丁然后进入yaffs2源代码目录执行:#cd yaffs2#./patch-ker.sh c /opt/mini2440/linux-2.6.33.3此时进入linux-2.6.32.2/fs目录,可以看到已经多了一个yaffs2目录。
NFS的设置步骤NFS(Network File System)是一种分布式文件系统,可以让不同的计算机通过网络共享文件。
在使用NFS之前,需要进行一系列的设置步骤来配置和启动NFS服务器和客户端。
以下是配置和启动NFS的详细步骤:1.安装NFS服务器和客户端软件:首先,要在服务器和客户端机器上安装NFS软件包。
可以通过以下命令安装NFS服务器软件包:```sudo apt-get install nfs-kernel-server```同样地,可以通过以下命令安装NFS客户端软件包:``````2.配置NFS服务器:```sudo nano /etc/exports```在文件中,每一行表示一个共享目录的配置。
每条配置项包括共享目录的路径、访问权限、允许访问的客户端以及其他选项。
例如:```/path/to/shared/directory client_ip(rw,sync,no_subtree_check) ```3.启动NFS服务器:使用以下命令启动NFS服务器:```sudo systemctl start nfs-kernel-server```该命令将启动NFS服务器并开始监听来自客户端的连接请求。
4.配置NFS客户端:```sudo nano /etc/fstab```在文件中,每一行表示一个挂载目录的配置。
每条配置项包括NFS服务器的IP地址或主机名、共享目录的路径、挂载点路径以及其他选项。
例如:```nfs_server_ip:/path/to/shared/directory /path/to/mount/point nfs rw 0 0```5.挂载NFS共享目录:使用以下命令挂载NFS共享目录:```sudo mount -a```该命令将挂载在`/etc/fstab`文件中定义的所有共享目录。
6.验证NFS设置:可以在客户端上使用以下命令验证NFS设置是否正确:```df -h```该命令将显示挂载的文件系统,包括NFS共享目录。
SD卡实现全启动及烧录nand与跳过ECC效验冲突算是笔记、以为本人忘形比较好。
其中有如有理解变差或表述错误的地方请各位高手见谅和指正。
起因和大部分人相同,项目需求。
我们需要完成一套能启动的u-boot、kernel与fs (filesystem)。
这点已经基本完成。
因为需要批量烧录所以必须满足:操作简单、windows 下可完成烧录、等。
环境:s3c6410的核心板。
在这里多嘴一下,我们遇到了u-boot与kernel的ECC效验冲突的问题(因为我的nand 烧录全部由u-boot完成),本来想通过修改u-boot中的ECC效验与kernel对应,但发现实在太麻烦,所以想这有没有其它方法可以避免u-boot与kernel的ECC效验冲突。
其实细想一下这是完全可以实现的,只要你能通过nfs启动fs,就说明kernel与fs本身是没问题的,而用u-boot烧录nand以后kernel读出的数据间出了问题,那么我们就可以不用u-boot 烧录fs,这样就跳过了u-boot、避免了u-boot写入nand的数据kernel读出来错误的问题。
不用u-boot写fs到nand,还不能用网络的方式即不能用tftp、nfs了(因为操作繁琐、不适合批量生产),jtag之类的就更不用说了,dnw倒是可以用,只是不能用u-boot写入那就计较麻烦。
其实sd卡和dnw都可以完成fs的烧写,但是我们是用sd卡一次性完成u-boot、kernel、fs的数据全部烧写到nand中,这样的话当然是用sd卡最方便快捷。
闲话多了点、入正题吧。
1、准备两个版面可正常工作的u-boot,一个nand启动、一个sd卡启动;2、kernel;3、fs(有些加工、具体修改下述)。
注:有关它们的启动和传参网上的说明已经很丰富了、所以跳过。
sd卡的数据读写格式:直接help movi吧,不过不是每个版本的u-boot都有movi子系统的支持,我用的是u-boot-1.1.6。
NFS服务器的配置一、NFS服务器端的配置,即共享发布者(一)需启动的服务和需安装的软件1、NFS服务器必须启动两个daemons服务:rpc.nfsd和rpc.mountdrpc.nfsd:用来管理客户端PC是否可以登录。
类似于windows中的共享权限。
rpc.mountd:用来管理客户端pc能够使用的文件安全权限。
如windows中的共享安全权限。
RPC:因为NFS支持的功能很多,所以NFS的功能对应的端口才无法固定,而是采用小于1024的随机端口。
但客户端需要得知服务器的端口才能联机,此时就需要启用RPC服务。
RPC的功能就是指定每个NFS功能的端口号。
并传信息给客户端,让客户端可以连到正确的端口上。
服务器在启动NFS时会随机取用数个端口,并主动向RPC注册,因此RPC知道每个NFS 功能对应的端口。
RPC用111端口监听客户端的请求,并应答正确的端口。
启动NFS前,RPC就要先启动了,否则NFS会无法向RPC注册。
2、NFS 服务器需要安装nfs主程序,nfs-utils和rpc主程序portmap(二)exports服务器的方法:1、NFS文件存取权限因为NFS没有验证机制,当客户端用户访问NFS服务器的共享文件夹时会遇到的权限情况:(1)NFS服务器端用户列表中有与客户端用户名相同的用户名时,客户端可以直接存取共享文件夹。
例:客户端用户为khp,而nfs服务器用户列表(/etc/passwd)中也有khp这个用户名,则将拥有KHP权限。
(2)当访问NFS服务器的客户端用户UID与服务器端UID相同,但用户名却不相同时,客户端将拥有与服务器端UID 相同但不同用户的权限。
例:客户端为501UID,用户名为khp的帐号访问NFS服务器。
NFS服务器用户列表中(/etc/passwd)有uid为501 ,但用户名为pla的用户,所以客户端khp用户可以拥有NFS 服务器pla相同权限。
(3)如果客户端用户UID在NFS服务器端用户列表中不存在时,则以匿名用户的权限访问。
NFS服务器的配置一、NFS服务器端的配置,即共享发布者(一)需启动的服务和需安装的软件1、NFS服务器必须启动两个daemons服务:rpc.nfsd和rpc.mountdrpc.nfsd:用来管理客户端PC是否可以登录。
类似于windows中的共享权限。
rpc.mountd:用来管理客户端pc能够使用的文件安全权限。
如windows中的共享安全权限。
RPC:因为NFS支持的功能很多,所以NFS的功能对应的端口才无法固定,而是采用小于1024的随机端口。
但客户端需要得知服务器的端口才能联机,此时就需要启用RPC服务。
RPC的功能就是指定每个NFS功能的端口号。
并传信息给客户端,让客户端可以连到正确的端口上。
服务器在启动NFS时会随机取用数个端口,并主动向RPC注册,因此RPC知道每个NFS 功能对应的端口。
RPC用111端口监听客户端的请求,并应答正确的端口。
启动NFS前,RPC就要先启动了,否则NFS会无法向RPC注册。
2、NFS 服务器需要安装nfs主程序,nfs-utils和rpc主程序portmap(二)exports服务器的方法:1、NFS文件存取权限因为NFS没有验证机制,当客户端用户访问NFS服务器的共享文件夹时会遇到的权限情况:(1)NFS服务器端用户列表中有与客户端用户名相同的用户名时,客户端可以直接存取共享文件夹。
例:客户端用户为khp,而nfs服务器用户列表(/etc/passwd)中也有khp这个用户名,则将拥有KHP权限。
(2)当访问NFS服务器的客户端用户UID与服务器端UID相同,但用户名却不相同时,客户端将拥有与服务器端UID 相同但不同用户的权限。
例:客户端为501UID,用户名为khp的帐号访问NFS服务器。
NFS服务器用户列表中(/etc/passwd)有uid为501 ,但用户名为pla的用户,所以客户端khp用户可以拥有NFS 服务器pla相同权限。
(3)如果客户端用户UID在NFS服务器端用户列表中不存在时,则以匿名用户的权限访问。