构建基本的嵌入式Linux根文件系统.docx

上传人:b****6 文档编号:8587143 上传时间:2023-01-31 格式:DOCX 页数:16 大小:23.60KB
下载 相关 举报
构建基本的嵌入式Linux根文件系统.docx_第1页
第1页 / 共16页
构建基本的嵌入式Linux根文件系统.docx_第2页
第2页 / 共16页
构建基本的嵌入式Linux根文件系统.docx_第3页
第3页 / 共16页
构建基本的嵌入式Linux根文件系统.docx_第4页
第4页 / 共16页
构建基本的嵌入式Linux根文件系统.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

构建基本的嵌入式Linux根文件系统.docx

《构建基本的嵌入式Linux根文件系统.docx》由会员分享,可在线阅读,更多相关《构建基本的嵌入式Linux根文件系统.docx(16页珍藏版)》请在冰豆网上搜索。

构建基本的嵌入式Linux根文件系统.docx

构建基本的嵌入式Linux根文件系统

构建基本的嵌入式Linux根文件系统

其实在去年8月份我做系统移植时就构建好了一个可以用的根文件系统,但是那时是跟着别人的《Linux全线移植文档》做的。

有些东西我也不清楚,只是跟着做,做出来能用就了事了,没有深究其中的规范,以及文件系统中哪些要,哪些不要。

趁着今年过年的几天假期,我移植重新移植了U-Boot1.3.1和Linux2.6.24到S3C2410及S3C2440后,我想好好的看看有关文件系统构建方法和规范,整理整理构建根文件系统的文档。

之后,我用了近一周的时间,慢慢研究《构建嵌入式Linux系统》这本书有关根文件系统的部分,以及一些网上的参考资料,不断地实验。

构建好了一个精简的根文件系统,下面我只介绍构建的过程和方法,至于原理我给出以下参考资料,自己看吧。

--------------------------------------------------------------------------------

1、《Linux系统移植》:

一个经典的Linux移植文档,共有95页的PDF文档,内容十分详细,里面有根文件系统的创建,还多地方都有下载(有的网站称之为《Linux系统全线移植文档》等等),很值得参考。

在这里感谢文档的作者们。

2、《构建嵌入式Linux系统》必看!

里面对文件系统的构建讲的挺细。

3、《FilesystemHierarchyStandard》Linux文件系统的标准规范。

我只看到英文的。

其他再遇到不懂的就google,基本上都是Linux的相关知识,都是找得到的。

--------------------------------------------------------------------------------

(1)创建根文件系统的基本目录结构。

我把这个过程做成了shell脚本(文件名为mkroot),很方便!

#!

/bin/sh

echo"creatintrootfsdir......"

mkdirrootfs

cdrootfs

echo"makingdir:

bindevetclibprocsbinsysusr"

mkdirbindevetclibprocsbinsysusr#必备的8个目录

mkdirusr/binusr/libusr/sbinlib/modules

#Don'tusemknod,unlessyourunthisScriptasroot!

#mknod-m600dev/consolec51

#mknod-m666dev/nullc13

echo"makingdir:

mnttmpvar"

mkdirmnttmpvar

chmod1777tmp

mkdirmnt/etcmnt/jffs2mnt/yaffsmnt/datamnt/temp

mkdirvar/libvar/lockvar/logvar/runvar/tmp

chmod1777var/tmp

echo"makingdir:

homerootboot"

mkdirhomerootboot

echo"done"

在你想要建立根文件系统的地方,运行:

[tekkamanninja@Tekkaman-Ninjanfs]$./mkroot

creatintrootfsdir......

makingdir:

bindevetclibprocsbinsysusr

makingdir:

mnttmpvar

makingdir:

homerootboot

done

[tekkamanninja@Tekkaman-Ninjanfs]$cdrootfs/dev/

[tekkamanninja@Tekkaman-Ninjadev]$su

口令:

[root@Tekkaman-Ninjadev]#mknod-m600consolec51;mknod-m666nullc13;exit

exit

[tekkamanninja@Tekkaman-Ninjadev]$

--------------------------------------------------------------------------------

(2)配置、编译和安装Busybox-1.9.1

[tekkamanninja@Tekkaman-Ninjasource]$tar-xjvfbusybox-1.9.1.tar.bz2

修改Makefile文件:

[tekkamanninja@Tekkaman-Ninjabusybox-1.9.1]$pwd

/home/tekkamanninja/working/source/busybox-1.9.1

[tekkamanninja@Tekkaman-Ninjabusybox-1.9.1]$kwriteMakefile

......(第151-154行)

#SUBARCH:

=$(shelluname-m|sed-es/i.86/i386/-es/sun4u/sparc64/\

#-es/arm.*/arm/-es/sa110/arm/\

#-es/s390x/s390/-es/parisc64/parisc/\

#-es/ppc.*/powerpc/-es/mips.*/mips/)

......(第174行附近)

#ARCH?

=$(SUBARCH)

#CROSS_COMPILE?

=

ARCH=arm

CROSS_COMPILE=/home/tekkamanninja/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-

[tekkamanninja@Tekkaman-Ninjabusybox-1.9.1]$makemenuconfig

在原有的基础上修改如下:

BusyboxSettings--->

InstallationOptions--->

[*]Don'tuse/usr

(/home/tekkamanninja/working/nfs/rootfs)BusyBoxinstallationprefix

BusyboxLibraryTuning--->

[*]Supportfor/etc/networks

[*]Additionaleditingkeys

[*]vi-stylelineeditingcommands

(15)Historysize

[*]Historysaving

[*]Tabcompletion

[*]Usernamecompletion

[*]Fancyshellprompts

Login/PasswordManagementUtilities--->选项全部N掉,后面单独使用TinyLogin。

(因为集成的好像不是很好用,我自己的经验是这样)

LinuxModuleUtilities--->

[N]Supportversion2.2.xto2.4.xLinuxkernels

Shells--->

---AshShellOptions下的选项全选

[tekkamanninja@Tekkaman-Ninjabusybox-1.9.1]$make

......

LINKbusybox_unstripped

Tryinglibraries:

cryptm

Librarycryptisneeded

Librarymisneeded

Finallinkwith:

cryptm

[tekkamanninja@Tekkaman-Ninjabusybox-1.9.1]$makeinstall

我是动态编译所以查看一下需要的动态库

[tekkamanninja@Tekkaman-Ninjabusybox-1.9.1]$/home/tekkamanninja/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-readelf-dbusybox

Dynamicsectionatoffset0xac014contains22entries:

TagTypeName/Value

0x00000001(NEEDED)Sharedlibrary:

[libcrypt.so.1]

0x00000001(NEEDED)Sharedlibrary:

[libm.so.6]

0x00000001(NEEDED)Sharedlibrary:

[libc.so.6]

0x0000000c(INIT)0xc0f0

0x0000000d(FINI)0x97608

0x00000004(HASH)0x80e8

0x00000005(STRTAB)0xa3c0

0x00000006(SYMTAB)0x8b30

0x0000000a(STRSZ)3371(bytes)

0x0000000b(SYMENT)16(bytes)

0x00000015(DEBUG)0x0

0x00000003(PLTGOT)0xbc0ec

0x00000002(PLTRELSZ)2976(bytes)

0x00000014(PLTREL)REL

0x00000017(JMPREL)0xb550

0x00000011(REL)0xb4e0

0x00000012(RELSZ)112(bytes)

0x00000013(RELENT)8(bytes)

0x6ffffffe(VERNEED)0xb400

0x6fffffff(VERNEEDNUM)3

0x6ffffff0(VERSYM)0xb0ec

0x00000000(NULL)0x0

--------------------------------------------------------------------------------

(3)修改和创建必要的文件。

[tekkamanninja@Tekkaman-Ninjabusybox-1.9.1]$cp-aexamples/bootfloppy/etc/*/home/tekkamanninja/working/nfs/rootfs/etc/

[tekkamanninja@Tekkaman-Ninjabusybox-1.9.1]$cd../../nfs/rootfs/etc/

1、增加为SHELL导入全局变量的文件/etc/profile

[tekkamanninja@Tekkaman-Ninjaetc]$kwriteprofile

#/etc/profile:

system-wide.profilefilefortheBourneshells

echo

echo"Processing/etc/profile..."

#no-op

#Setsearchlibrarypath

echo"Setsearchlibrarypathin/etc/profile"

exportLD_LIBRARY_PATH=/lib:

/usr/lib

#Setuserpath

echo"Setuserpathin/etc/profile"

PATH=/bin:

/sbin:

/usr/bin:

/usr/sbin

exportPATH

#SetPS1

#注意:

ash除了SHELL变量外,支持\u、\h、\W、\$、\!

、\n、\w、\nnn(ASCII字符对应的八进制数)

#以及\e[xx;xxm(彩色特效)等等!

#而且前面还要多加一个'\'!

echo"SetPS1in/etc/profile"

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

echo"Done"

echo

2、增加初始化文件

[tekkamanninja@Tekkaman-Ninjaetc]$kwriteinittab:

:

sysinit:

/etc/init.d/rcS

:

:

respawn:

-/bin/login

:

:

restart:

/sbin/init

:

:

ctrlaltdel:

/sbin/reboot

:

:

shutdown:

/bin/umount-a-r

:

:

shutdown:

/sbin/swapoff-a

[tekkamanninja@Tekkaman-Ninjaetc]$kwritefstabproc/procprocdefaults00

none/tmpramfsdefaults00

mdev/devramfsdefaults00

sysfs/syssysfsdefaults00

3、增加初始化脚本

[tekkamanninja@Tekkaman-Ninjaetc]$kwriteinit.d/rcS

#!

/bin/sh

echo"----------mountall"

/bin/mount-a

echo"----------Startingmdev......"

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

mdev-s

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

echo"TekkamanNinja2440Rootfs(nfs)2008.2"

echo"LoveLinux!

!

@@LoveKeKe!

!

"

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

4、删除备份文件

[tekkamanninja@Tekkaman-Ninjaetc]$rm*~init.d/*~

5、为mdev创建配置文件

[tekkamanninja@Tekkaman-Ninjaetc]$vimdev.conf

创建一个mdev.conf文件,内容可有可无。

--------------------------------------------------------------------------------

(4)为使用用户登录功能移植TinyLogin

1、下载

从下载tinylogin-snapshot.tar.bz2,并解压.

[tekkamanninja@Tekkaman-Ninjasource]$tar-xjvftinylogin-snapshot.tar.bz2

2、修改tinyLogin的Makefile

[tekkamanninja@Tekkaman-Ninjasource]$cdtinylogin

[tekkamanninja@Tekkaman-Ninjatinylogin]$kwriteMakefile

指明tinyLogin使用自己的算法来处理用户密码USE_SYSTEM_PWD_GRP=false

......

CROSS=/home/tekkamanninja/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-

CC=$(CROSS)gcc

AR=$(CROSS)ar

STRIPTOOL=$(CROSS)strip

3、编译并安装[tekkamanninja@Tekkaman-Ninjatinylogin]$makePREFIX=/home/tekkamanninja/working/nfs/rootfsinstall

Abortinginstall--Youmustberoot,otherwiseIcan't.

maketinyloginbesetuidroot,whichwillcauseittofail.

make:

***[install]错误1

[tekkamanninja@Tekkaman-Ninjatinylogin]$su

口令:

[root@Tekkaman-Ninjatinylogin]#makePREFIX=/home/tekkamanninja/working/nfs/rootfsinstall

[root@Tekkaman-Ninjatinylogin]#exit

exit

我是动态编译所以查看一下需要的动态库

[tekkamanninja@Tekkaman-Ninjatinylogin]$/home/tekkamanninja/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-readelf-dtinylogin

Dynamicsectionatoffset0x9670contains21entries:

TagTypeName/Value

0x00000001(NEEDED)Sharedlibrary:

[libcrypt.so.1]

0x00000001(NEEDED)Sharedlibrary:

[libc.so.6]

0x0000000c(INIT)0x9c40

0x0000000d(FINI)0x10160

0x00000004(HASH)0x8128

0x00000005(STRTAB)0x9070

0x00000006(SYMTAB)0x85e0

0x0000000a(STRSZ)1430(bytes)

0x0000000b(SYMENT)16(bytes)

0x00000015(DEBUG)0x0

0x00000003(PLTGOT)0x19740

0x00000002(PLTRELSZ)1064(bytes)

0x00000014(PLTREL)REL

0x00000017(JMPREL)0x9818

0x00000011(REL)0x97c8

0x00000012(RELSZ)80(bytes)

0x00000013(RELENT)8(bytes)

0x6ffffffe(VERNEED)0x9758

0x6fffffff(VERNEEDNUM)2

0x6ffffff0(VERSYM)0x9606

0x00000000(NULL)0x0

创建创建帐号及密码文件:

[tekkamanninja@Tekkaman-Ninjatinylogin]$cd../../nfs/rootfs/etc/

[tekkamanninja@Tekkaman-Ninjaetc]$su

口令:

[root@Tekkaman-Ninjaetc]#cp/etc/passwd.;cp/etc/shadow.;cp/etc/group.

[root@Tekkaman-Ninjaetc]#kwritepasswd

root:

x:

0:

0:

root:

/root:

/bin/sh

[root@Tekkaman-Ninjaetc]#kwritegroup

root:

x:

0:

root

[root@Tekkaman-Ninjaetc]#kwriteshadow

root:

$1$N8K8eEQe$.XkJo3xcsjOE6vo1jW9Nk/:

13923:

0:

99999:

7:

:

:

[root@Tekkaman-Ninjaetc]#rm*~

rm:

是否删除普通文件“group~”?

y

rm:

是否删除普通文件“passwd~”?

y

rm:

是否删除普通文件“shadow~”?

y

[root@Tekkaman-Ninjaetc]#exit

exit

[tekkamanninja@Tekkaman-Ninjaetc]$

这3个文件是从Host中拷贝过来的,只留下root帐号。

那么现在root的登陆密码和Host的登陆口令一致了,可以登录后再修改以及创建新用户。

(若使用以上文件,则root密码为tekkaman)

拷贝必需的动态库文件[tekkamanninja@Tekkaman-Ninjalib]$cp-d/home/tekkamanninja/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/arm-9tdmi-linux-gnu/lib/ld*.

cp:

略过目录“/home/tekkamanninja/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/arm-9tdmi-linux-gnu/lib/ldscripts”

[tekkamanninja@Tekkaman-Ninjalib]$cp/home/tekkamanninja/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/arm-9tdmi-linux-gnu/lib/libc-2.3.2.so.;cp-d/home/tekkamanninja/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/arm-9tdmi-linux-gnu/lib/libc.so.6.

[tekkamanninja@Tekkaman-Ninjalib]$cp/home/tekkamanninja/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/ar

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

当前位置:首页 > 医药卫生 > 预防医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1