嵌入式系统根文件系统制作.docx

上传人:b****6 文档编号:12711860 上传时间:2023-06-07 格式:DOCX 页数:20 大小:22.76KB
下载 相关 举报
嵌入式系统根文件系统制作.docx_第1页
第1页 / 共20页
嵌入式系统根文件系统制作.docx_第2页
第2页 / 共20页
嵌入式系统根文件系统制作.docx_第3页
第3页 / 共20页
嵌入式系统根文件系统制作.docx_第4页
第4页 / 共20页
嵌入式系统根文件系统制作.docx_第5页
第5页 / 共20页
嵌入式系统根文件系统制作.docx_第6页
第6页 / 共20页
嵌入式系统根文件系统制作.docx_第7页
第7页 / 共20页
嵌入式系统根文件系统制作.docx_第8页
第8页 / 共20页
嵌入式系统根文件系统制作.docx_第9页
第9页 / 共20页
嵌入式系统根文件系统制作.docx_第10页
第10页 / 共20页
嵌入式系统根文件系统制作.docx_第11页
第11页 / 共20页
嵌入式系统根文件系统制作.docx_第12页
第12页 / 共20页
嵌入式系统根文件系统制作.docx_第13页
第13页 / 共20页
嵌入式系统根文件系统制作.docx_第14页
第14页 / 共20页
嵌入式系统根文件系统制作.docx_第15页
第15页 / 共20页
嵌入式系统根文件系统制作.docx_第16页
第16页 / 共20页
嵌入式系统根文件系统制作.docx_第17页
第17页 / 共20页
嵌入式系统根文件系统制作.docx_第18页
第18页 / 共20页
嵌入式系统根文件系统制作.docx_第19页
第19页 / 共20页
嵌入式系统根文件系统制作.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

嵌入式系统根文件系统制作.docx

《嵌入式系统根文件系统制作.docx》由会员分享,可在线阅读,更多相关《嵌入式系统根文件系统制作.docx(20页珍藏版)》请在冰点文库上搜索。

嵌入式系统根文件系统制作.docx

嵌入式系统根文件系统制作

嵌入式系统根文件系统制作(up-2410)  

2012-05-0207:

17:

46|  分类:

嵌入式系统移植|  标签:

|字号大中小 订阅

 

一、主机环境

 Linuxvm-dev2.6.9-42.ELRedHatEL4,VMWare6.0.3;

 gccversion3.4.620060404(RedHat3.4.6-3)Threadmodel:

posixgccversion3.4.6

 所需源文件:

 busybox-1.12.2.tar.bz2;

1.1获取所需的源码包

cramfs-1.1.tar.gz(用来生成cramfs格式的文件系统映像)、yaffs2.tar.gz(用来生成yaffs2格式的文件系统映像)。

1.2解压源码包生成映像工具

依次解压三个源码包,然后进入cramfs-1.1目录,执行以下命令:

#apt-getinstallzlib1g-dev

#make

执行完成后就生成了mkcramfs工具,用来生成cramfs映像。

再进入yaffs2目录,执行以下命令:

#make

执行完成之后就在yaffs2目录下的utils目录生成了mkyaffsimage(最大支持512B页)和mkyaffs2image(最大支持2KB页,并向前兼容)两个工具,这两个工具用来生成yaffs映像。

 

二、用Busybox创建文件系统

前提是:

通过samba服务器把源码包 busybox-1.12.2.tar.bz2拷贝到了虚拟机的/home/uptech目录

1、解压busybox-1.12.2.tar.bz2,路径为

[root@vm-dev2410-s]#pwd

/root/2410-s

[root@vm-dev2410-s]#mkdirrootfs

[root@vm-dev2410-s]#cdrootfs

[root@vm-devrootfs]#cp/mnt/hgfs/rootfs/busybox-1.12.0.tar.bz2./

[root@vm-devrootfs]#ls

busybox-1.12.0.tar.bz2

[root@vm-devrootfs]#tar-vxjfbusybox-1.12.2.tar.bz2

[root@vm-devrootfs]#cdbusybox-1.12.2

[root@vm-devbusybox-1.12.2]#pwd

/root/2410-s/rootfs/busybox-1.12.2

[root@vm-devbusybox-1.12.2]#viMakefile

[root@vm-devbusybox-1.12.2]#

修改Makefile中的ARCH和CROSS_COMPILE与本机的路径一致:

 

CROSS_COMPILE?

=arm-linux-

...

ARCH?

=arm

 

2、编译busybox。

先makemenuconfig,修改以下:

 

[root@vm-devbusybox-1.12.2]#makemenuconfig

BusyboxSettings--->

    BuildOptions--->

        [*]BuildBusyBoxasastaticbinary(nosharedlibs)

        //直接编译成静态库,省事点

        (/opt/crosstools/gcc-3.4.6-glibc-2.3.6/bin/arm-linux-)CrossCompilerprefix

        //这里和Makefile里保持一致,应该写一处就行了

    InstallationOptions--->

        []Don'tuse/usr

        //使用usr目录

BusyboxLibraryTuning--->

[*]Fancyshellprompts

//一定要选上,否则很多转意字符无法识别

Shells--->

    Chooseyourdefaultshell(ash)--->

    //这里选择shell为ash,应该是默认选中的

        ---ash

        //把ash这档的选项全部选上

MiscellaneousUtilities--->

[]inotifyd

//不选

LinuxModuleUtilities--->

[]Simplifiedmodutils//不选

[]depmod

[*]insmod

[]Moduleversionchecking(NEW)

[]Addmodulesymbolstokernelsymboltable(NEW)

[]Inkernelmemoryoptimization(uClinuxonly)(NEW)

[]Enableloadmap(-m)option(NEW)

[*]rmmod

[*]lsmod

 

保存退出,直接make,makeinstall。

可以看到如下目录

[root@vm-devbusybox-1.12.2]#ls_install/

binlinuxrcsbinusr

[root@vm-devbusybox-1.12.2]#

3、用shell脚本创建根文件系统的目录结构,并在想要建立根文件系统的地方运行此脚本。

我是用root用户登陆的,直接创建了设备节点。

[root@vm-devbusybox-1.12.2]#cd../

[root@vm-devrootfs]#pwd

/root/2410-s/rootfs

[root@vm-devrootfs]#mkdirroot_stand

[root@vm-devrootfs]#cdroot_stand

[root@vm-devroot_stand]pwd

/root/2410-s/rootfs/root_stand

[root@vm-devroot_stand]#vibuild_fs.sh

#!

/bin/sh

echo"makeingrootdir"

mkdirrootfs

cdrootfs

echo"makeingdir:

bindevetclibprocsbinsysusr"

mkdirbindevetclibprocsbinsysusr#8dirs

mkdirusr/binusr/libusr/sbinlib/modules

#Don'tusemknod,unlessyourunthisScriptas

mknod-m600dev/consolec51

mknod-m666dev/nullc13

echo"makingdir:

mnttmpvar"

mkdirmnttmpvar

chmod777tmp

mkdirmnt/etcmnt/jiffs2mnt/yaffsmnt/datamnt/temp

mkdirvar/libvar/lockvar/logvar/runvar/tmp

chmod777var/tmp

echo"makingdir:

homerootboot"

mkdirhomerootboot

echo"done"

[root@vm-devroot_stand]#

执行这个sh:

[root@vm-devroot_stand]#shbuild_fs.sh

makeingrootdir

makeingdir:

bindevetclibprocsbinsysusr

makingdir:

mnttmpvar

makingdir:

homerootboot

done

创建出一个主文件夹rootfs,里面有一批文件目录:

[root@vm-devroot_stand]#cdrootfs/

[root@vm-devrootfs]#ls

binbootdevetchomelibmntprocrootsbinsystmpusrvar

[root@vm-devrootfs]#

4、把busybox源码目录下的etc的内容拷贝到这里的etc下

[root@vm-devrootfs]#cdetc/

[root@vm-devetc]#ls

[root@vm-devetc]#cp-a/root/2410-s/rootfs/busybox-1.12.2/examples/bootfloppy/etc/*./

[root@vm-devetc]#ls

fstabinit.dinittabprofile

[root@vm-devetc]#

5、修改拷贝过来的profile文件

[root@vm-devetc]#viprofile

#/etc/profile:

system-wide.profilefilefortheBourneshells

echo"Processing/etc/profile"

#no-op

#Setsearchlibrarypath

echo"Setsearchlibrarypath"

exportLD_LIBRARY_PATH=/lib:

/usr/lib

#Setuserpath

echo"Setuserpath"

PATH=/bin:

/sbin:

/usr/bin:

/usr/sbin

exportPATH

#SetPS1

echo"SetPS1"

HOSTNAME=`/bin/hostname`

#此处让shell提示符显示host名称的。

是`,不是’,要注意

#会在进入根系统后显示Jacky

exportPS1="\\e[32m[$USER@$HOSTNAME\\w\\a]\\$\\e[00;37m"

#此处\\e[32m是让后面的“[$USER@$HOSTNAME\\w\\a]”显示为绿色

#\\e[00是关闭效果

#\\e[05是闪烁

#37m是让后面的显示为白色

#多个命令可以;号隔开

echo"Alldone!

"

echo

 

6、修改初始化文件inittab和fstab

Inittab

[root@vm-devetc]#viinittab

:

:

sysinit:

/etc/init.d/rcS

:

:

respawn:

-/bin/sh

:

:

restart:

/sbin/init

tty2:

:

askfirst:

-/bin/sh

:

:

ctrlaltdel:

/bin/umount-a-r

:

:

shutdown:

/bin/umount-a-r

:

:

shutdown:

/sbin/swapoff–a

Fstab

[root@vm-devetc]#vimfstab

none/procprocdefaults00

none/dev/ptsdevptsmode=062200

tmpfs/dev/shmtmpfsdefaults00

/dev/mtdblock3/rootyaffsdefaults11

none/syssysfsdefaults00

tmpfs/tmptmpfsdefaults00

7、修改初始化的脚本文件init.d/rcS

 

[root@vm-devetc]#viinit.d/rcS

#!

/bin/sh

echo"Processingetc/init.d/rc.S"

#hostname${HOSTNAME}

hostnameup-tech

/bin/mount-tprocnone/proc

/bin/mount-tsysfsnone/sys

/bin/mount-ttmpfs-omode=0755none/dev

/bin/mkdir/dev/pts

/bin/mkdir/dev/shm

echo"Startmdev...."

/bin/echo/sbin/mdev>proc/sys/kernel/hotplug

mdev-s

echo"Mountall"

/bin/mount-a

echo-n"Settingupinterfacelo:

"

 

ifconfigloup127.0.0.1

echo-n"Settingupinterfaceeth0:

"

 

ifconfigeth0up192.168.1.193

echo"****************************************************"

echo"rootfsfors3c2410"

echo"Createdbylyj_uptech@2008.11.28"

echo"GoodLuck"

echo"www.up-"

echo"****************************************************"

echo

 

8、创建一个空的mdev.conf文件,在挂载根文件系统时会用到的(到这儿)

[root@vm-devetc]#touchmdev.conf

9、从本机拷贝passwd、shadow、group文件。

[root@vm-devetc]#cp/etc/passwd.

[root@vm-devetc]#cp/etc/shadow.

[root@vm-devetc]#cp/etc/group.

修改passwd文件,把第一行和最后一行的bash修改成ash。

10、把busybox默认安装目录中的文件全部复制到这里的rootfs中。

会发现多了linuxrc->bin/busybox文件,这是挂载文件系统需要执行的。

[root@vm-devetc]#cd..

[root@vm-devrootfs]#cp-rfv/root/2410-s/rootfs/busybox-1.12.2/_install/*./

OK,以上用busybox创建了一个基本的文件系统。

PS:

   如果编译busybox时选择动态库方式编译,则需要查看生成的busybox使用哪些动态库,然后把它们拷贝到rootfs/lib目录下。

[root@vm-devlib]#arm-linux-readelf-d../bin/busybox

Dynamicsectionatoffset0xc1014contains21entries:

  TagTypeName/Value

 0x00000001(NEEDED)Sharedlibrary:

[libm.so.6]

 0x00000001(NEEDED)Sharedlibrary:

[libc.so.6]

 0x0000000c(INIT)0xc2ec

 0x0000000d(FINI)0xa96b8

 0x00000004(HASH)0x80e8

 0x00000005(STRTAB)0xa4c4

 0x00000006(SYMTAB)0x8b64

 0x0000000a(STRSZ)3505(bytes)

 0x0000000b(SYMENT)16(bytes)

 0x00000015(DEBUG)0x0

 0x00000003(PLTGOT)0xd10e4

 0x00000002(PLTRELSZ)3112(bytes)

 0x00000014(PLTREL)REL

 0x00000017(JMPREL)0xb6c4

 0x00000011(REL)0xb674

 0x00000012(RELSZ)80(bytes)

 0x00000013(RELENT)8(bytes)

 0x6ffffffe(VERNEED)0xb5a4

 0x6fffffff(VERNEEDNUM)2

 0x6ffffff0(VERSYM)0xb276

 0x00000000(NULL)0x0

可以看出,使用了libm.so.6和libc.so.6两个库。

发现只拷贝这两个库还不够,还需要ld-linux.so.2和libgcc_s.so.1,也就是我编译出来的这个busybox需要4个动态库文件。

#cp/opt/crosstools/gcc-3.4.6-glibc-2.3.6/lib/libm.so.6.

#cp/opt/crosstools/gcc-3.4.6-glibc-2.3.6/lib/libc.so.6.

#cp/opt/crosstools/gcc-3.4.6-glibc-2.3.6/lib/ld-linux.so.2.

#cp/opt/crosstools/gcc-3.4.6-glibc-2.3.6/lib/libgcc_s.so.1.

这样,使用动态库可以节省一半左右的空间,不过效率有所降低。

11.由于以后的实验程序会依赖一些库文件,为了方便,我们预先将用到的库文件拷贝到lib目录下(可拷贝光盘中提供的lib.tar.bz2目录),如下所示:

[root@vm-devrootfs]#cd../

[root@vm-devroot_stand]#cp/mnt/hgfs/rootfs/lib.tar.bz2./

[root@vm-devroot_stand]#tarjxvflib.tar.bz2

[root@vm-devroot_stand]#cdrootfs/lib

[root@vm-devlib]#cp../../lib/*-a-rf./

 

 

12.制作cramfs的文件系统

[root@vm-devlib]#cd../../

[root@vm-devroot_stand]#ls

build.shliblib.tar.bz2rootfs

进入cramfs-1.1目录

[root@vm-devroot_stand]#./mkcramfsrootfs/../root.cramfs

[root@vm-devroot_stand2]#cproot.cramfs/tftpboot

三、测试

注意:

前提是已烧写好uboot和内核镜像

烧写文件系统

1. 开启windows的tftp服务器,设置环境变量,保证开发板和windows在同一网段及开发板的tftp服务器的IP为windows的IP。

[up-class2410#]setenvserverip192.168.1.126

[up-class2410#]setenvipaddr192.168.1.129

[up-class2410#]saveenv

SavingEnvironmenttoNAND...

ErasingNand...WritingtoNand...done

 

2.下载并烧写到nandflash文件系统对应的分区中

[up-class2410#]tftp0x30008000root.cramfs

[up-class2410#]nanderase0x2800000x400000

[up-class2410#]nandwrite0x300080000x2800000x300000

 

3.设置启动参数

[up-class2410#]setenvbootcmdnandread0x300080000x800000x200000\;bootm

此项是内核自动启动的参数,如果已设置就不用再重新设置

[up-class2410#]setenvbootargsroot=/dev/mtdblock2init=/linuxrcconsole=ttySAC0,115200

[up-class2410#]saveenv

SavingEnvironmenttoNAND...

ErasingNand...WritingtoNand...done

[up-class2410#]printenv

bootdelay=5

baudrate=115200

ethaddr=08:

00:

3e:

26:

0a:

5b

bootfile="uImage"

stdin=serial

stdout=serial

stderr=serial

filesize=26D000

fileaddr=30008000

netmask=255.255.255.0

ipaddr=192.168.1.129

serverip=192.168.1.126

bootcmd=nandread0x300080000x800000x200000;bootm

bootargs=root=/dev/mtdblock2init=/linuxrcconsole=ttySAC0,115200

Environmentsize:

332/16380bytes

 

4.重启开发板

[up-class2410#]reset

启动目标板,串口输出显示根文件系统已经加载成功:

U-Boot1.3.2(Nov272016-17:

43:

03)

DRAM:

64MB

Flash:

512kB

NAND:

64MiB

In:

serial

Out:

serial

Err:

serial

FoundDM9000ID:

90000a46ataddress10000000!

DM9000workin16buswidth

bd->bi_entaddr:

08:

00:

3e:

26:

0a:

5b

[eth_init]MAC:

8:

0:

3e:

26:

a:

5b:

Hitanykeytostopautoboot:

0

NANDread:

device0offset0x80000,size0x1b0000

1769472bytesread:

OK

##Bootingimageat30008000...

ImageName:

Linux-2.6.24.4

Created:

2016-11-277:

24:

11UTC

ImageType:

ARMLinuxKernelImage(uncompressed)

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 英语

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2