构建基本的嵌入式Linux根文件系统文档格式.docx
《构建基本的嵌入式Linux根文件系统文档格式.docx》由会员分享,可在线阅读,更多相关《构建基本的嵌入式Linux根文件系统文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
mkdirmnt/etcmnt/jffs2mnt/yaffsmnt/datamnt/temp
mkdirvar/libvar/lockvar/logvar/runvar/tmp
chmod1777var/tmp
homerootboot"
mkdirhomerootboot
echo"
done"
在你想要建立根文件系统的地方,运行:
[tekkamanninja@Tekkaman-Ninjanfs]$
./mkroot
creatintrootfsdir......
makingdir
:
bindevetclibprocsbinsysusr
mnttmpvar
homerootboot
done
cdrootfs/dev/
[tekkamanninja@Tekkaman-Ninjadev]$
su
口令:
[root@Tekkaman-Ninjadev]#
mknod
-m600consolec51;
-m666
null
c13;
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
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-
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
下的选项全选
make
......
LINKbusybox_unstripped
Tryinglibraries:
cryptm
Librarycryptisneeded
Librarymisneeded
Finallinkwith:
makeinstall
我是动态编译所以查看一下需要的动态库
/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]
[libm.so.6]
[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
0x00000015
(DEBUG)
0x0
0x00000003
(PLTGOT)
0xbc0ec
0x00000002
(PLTRELSZ)
2976
0x00000014
(PLTREL)
REL
0x00000017
(JMPREL)
0xb550
0x00000011
(REL)
0xb4e0
0x00000012
(RELSZ)
112
0x00000013
(RELENT)
8
0x6ffffffe
(VERNEED)
0xb400
0x6fffffff
(VERNEEDNUM)
3
0x6ffffff0
(VERSYM)
0xb0ec
0x00000000
(NULL)
(3)修改和创建必要的文件。
cp
-aexamples/bootfloppy/etc/*
/home/tekkamanninja/working/nfs/rootfs/etc/
cd../../nfs/rootfs/etc/
1、增加为SHELL导入全局变量的文件/etc/profile
[tekkamanninja@Tekkaman-Ninjaetc]$kwriteprofile
/etc/profile:
system-wide
.profile
file
for
theBourneshells
echo
Processing/etc/profile..."
no-op
Set
search
librarypath
Setsearchlibrarypathin/etc/profile"
export
LD_LIBRARY_PATH=/lib:
/usr/lib
userpath
Setuserpathin/etc/profile"
PATH=/bin:
/sbin:
/usr/bin:
/usr/sbin
PATH
PS1
#注意:
ash除了SHELL变量外,支持\u、\h、\W、\$、\!
、\n、\w、\nnn(ASCII字符对应的八进制数)
#以及\e[xx;
xxm
(彩色特效)等等!
#而且前面还要多加一个
'
\'
!
SetPS1in
/etc/profile"
exportPS1="
\\e[05;
32m[$USER@\\w\\a]\\$\\e[00;
34m"
Done"
2、增加初始化文件
[tekkamanninja@Tekkaman-Ninjaetc]$kwriteinittab
sysinit:
/etc/init.d/rcS
respawn:
-/bin/login
restart:
/sbin/init
ctrlaltdel:
/sbin/reboot
shutdown:
/bin/umount
-a
-r
/sbin/swapoff
-a
[tekkamanninja@Tekkaman-Ninjaetc]$kwritefstab
proc
/procprocdefaults00
none
/tmpramfsdefaults00
mdev
/devramfsdefaults00
sysfs
/syssysfsdefaults00
3、增加初始化脚本
[tekkamanninja@Tekkaman-Ninjaetc]$kwriteinit.d/rcS
----------mountall"
/bin/mount
----------Startingmdev......"
/bin/echo
/sbin/mdev
>
/proc/sys/kernel/hotplug
-s
*********************************************************"
TekkamanNinja2440Rootfs(nfs)2008.2"
LoveLinux!
!
@@LoveKeKe!
"
********************************************************"
4、删除备份文件
[tekkamanninja@Tekkaman-Ninjaetc]$rm*~init.d/*~
5、为mdev创建配置文件
[tekkamanninja@Tekkaman-Ninjaetc]$vimdev.conf
创建一个mdev.conf文件,内容可有可无。
(4)为使用用户登录功能移植TinyLogin
1、下载
从
下载tinylogin-snapshot.tar.bz2,并解压.
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
编译并安装
[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
-dtinylogin
Dynamicsectionatoffset0x9670contains21entries:
0x9c40
0x10160
0x8128
0x9070
0x85e0
1430
0x19740
1064
0x9818
0x97c8
80
0x9758
2
0x9606
创建创建帐号及密码文件:
cd
../../nfs/rootfs/etc/
[tekkamanninja@Tekkaman-Ninjaetc]$
[root@Tekkaman-Ninjaetc]#
/etc/passwd
.
;
/etc/shadow
/etc/group
.
kwritepasswd
root:
x:
0:
/root:
kwritegroup
root
kwriteshadow
$1$N8K8eEQe$.XkJo3xcsjOE6vo1jW9Nk/:
13923:
99999:
7:
rm
*~
rm:
是否删除普通文件“group~”?
y
是否删除普通文件“passwd~”?
是否删除普通文件“shadow~”?
[tekkamanninja@Tekkaman-Ninjaetc]$
这
3个文件是从Host中拷贝过来的,只留下root帐号。
那么现在root的登陆密码和Host的登陆口令一致了,可以登录后再修改以及创建新用户。
(
若使用以上文件,则root密码为tekkaman)
拷贝必需的动态库文件
[tekkamanninja@Tekkaman-Ninjalib]$
-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”
/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
.;
/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
/home/tekkamanninja/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/arm-9tdmi-linux-gnu/lib/libm-*
/home/tekkamanninja/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/arm-9tdmi