文章目录
根文件系统概览
/bin:系统命令,比如cp,cat,ls,mkdir等。
/sbin:系统管理员命令,比如ifconfig,reboot,shutdown等。
/boot:系统启动相关文件。比如grup配置,内核镜像文件等
/etc:系统配置文件,比如inittab,fstab,init.d等
/lib:系统库文件,静态库和动态库。
/dev:设备文件
/usr:用户命令
/proc:系统伪文件系统挂载点
/sys:系统输出的一些信息
/var:系统日志文件
/mnt:其他挂载点
创建根目录树结构
mkdir{apps,bin,data,dev,info,proc,root,sbin,sys,tmp,var,etc/init.d,mnt/{usb,mmc},usr/{,bin,sbin,lib},lib{,modules/{,3.0.0}}}
安装动态库:
我们在进行bsp开发的时候,交叉编译器的制作是必不可少的步骤,所以动态库的来源就是交叉编译器目录下的“.so”文件。比如
find /opt/arm920t/ -name “.so” | grep -v gconv | xargs -i cp -af {} ./因为复制过去之后,会有一些符号链接失效,使用symlink.sh脚本文件重新链接起来
#! /bin/sh
for sf infind -L -type l | cut -d'/' -f2
; do
# parser and get symlink target file name
file=ls -l $sf | awk -F '/' '{ print $NF }'
# remove invalid symlink file and generate new one
rm -f $sf && ln -s $file $sf
done
安装busybox:
集成相当多的linux命令,我们在可以直接安装到根文件系统中。 Linux系统在执行一条命令时,默认会到/bin、/sbin、/usr/bin、/usr/sbin这些路径下找,这样在进行驱动开发时,使用起来和虚拟机差不多,提高办事效率。
创建/dev路径下的设备节点:
sudo mknod -m666 dev/null c 1 3
sudo mknod -m666 dev/console c 5 1
sudo mknod -m666 dev/ttyS0 c 4 64
创建/var路径下文件:主要是一些日志信息
ln -s /tmp var/lock
ln -s /tmp var/log
ln -s /tmp var/run
ln -s /tmp var/tmp
创建/etc路径下文件
- inittab
Linux内核自举启动完成之后,最后将创建init进程并执行根文件系统中的/init或/initrc程序,该程序解析并执行/etc/inittab配置文件,在此文件中配置 了init进程在系统启动要启动哪些应用程序。
# mount all the file systems specified in /etc/fstab ::sysinit:/bin/mount -a
# Use mdev to auto generate device nod and auto mount SD card and USB storage
::sysinit:/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug ::sysinit:/sbin/mdev -s
#make shm, pts support
::sysinit:/bin/mkdir -p /dev/pts
::sysinit:/bin/mkdir -p /dev/shm
::sysinit:/bin/mount -t devpts devpts /dev/pts
#Set hostname
null::sysinit:/bin/hostname -F /etc/hostname
#Enable console logon
null::respawn:/sbin/getty -L ttyS0 115200 vt100
# now run any rc scripts, which used to start other application
null::wait:/etc/init.d/rcS
# system daemon null::respawn:/sbin/syslogd -n
null::respawn:/sbin/klogd -n
# Stuff to do before rebooting
null::shutdown:/bin/killall klogd
null::shutdown:/bin/killall syslogd
null::shutdown:/bin/umount -a -r
-
fstab
Linux下的mount -a命令将自动挂载/etc/fstab文件中指定的所有需要系统自动挂载的文件。在/etc/inittab中会使用该命令在上电时自动挂载相应的文件 系统,这里面主要是挂载一些伪文件系统,这些伪文件系统主要是导出Linux内核运行的相关信息,如比较重要的tmpfs、sysfs、proc文件系统等。 -
hostname
FL2440
- 创建系统启动脚本
启动脚本一、 /etc/init.d/rcS:/etc/inittab脚本会使用命令/etc/init.d/rcS启动所有其它的应用程序,下面创建etc/rcS脚本,该脚本将执行/etc/init.d/下所有文件名以S开头且后面紧 跟至少包括2个字符的文件。
# Start all scripts in /etc/init.d, executing them in numerical order.
for i in /etc/init.d/S??* ; do
$i
done
启动脚本二、 /etc/init.d/S10_network:望系统启动时自动设置网卡的IP地址
#!/bin/sh
ifconfig eth0 192.168.1.250 netmask 255.255.255.0 up
启动脚本三、 /etc/init.d/S99_rcsApp:今后我们很多应用程序将会存放在/apps分区下,有时我们希望这些应用程序的启动脚本也存放在该分区下以便于管理。
# Start all scripts in /apps/etc/init.d, executing them in numerical order.
for i in /apps/etc/init.d/S??* ; do
$i
done
创建shell的配置文件:
在Linux服务器上,我们可以通过修改/.bash_profile或/.bashrc文件来修改Shell的配置文件,如修改PATH、LD_LIBRARY_PATH环境变量等,也 可以在里面定义命令别名。在嵌入式环境下,我们这些Shell的配置保存在/etc/profile文件中。
# Busybox Shell(ash) configure file export
PATH=/bin:sbin:/usr/bin:/usr/sbin:/apps/bin:/apps/tools
export PS1='\w >: '
export USER=`id -un`
export LOGNAME=$USER
export HOSTNAME=`/bin/hostname`
export HISTSIZE=500
export HISTFILESIZE=500
export PAGER='/bin/more'
export EDITOR='/bin/vi'
export INPUTRC=/etc/inputrc
export LD_LIBRARY_PATH=/lib:/usr/lib:/apps/lib
export network_cfg_dir=/apps/etc/network
### Some alias command
alias vim='vi'
alias ll='ls -l'
alias l.='ls -d .*'
alias df='df -h'
创建Linux登录帐号文件:
/etc/group文件保存了用户组信息;
/etc/passwd文件保存了用户信息;
/etc/shadow文件保存来相应用户的密码,/etc/shadow文件保存了相应帐号的密文,这个文件内容不能直接创建。如果我们想在嵌入式Linux系统中设置root的登录密码为123456,则我们先在自 己的Linux服务器或虚拟机上修改root密码为123456,然后再将Linux服务器或虚拟机上的/etc/shadow文件里root帐号的密码密文部分拷贝出来,创建根 文件系统树里的etc/shadow时将密文部分用这个密文替换。这个过程做完后记得将自己的Linux服务器或虚拟机的root密码还原回去。
创建/etc/resolv.conf文件
用来DNS服务
创建/etc/hosts文件
/etc/hosts文件存放本机静态绑定的域名,如下面在本机上域名localhost就会被解析成127.0.0.1,不需要DNS来做解析。
创建/etc/TZ文件
/etc/TZ文件配置了系统的时区 。
创建/etc/issue文件
/etc/issue文件里存放在console上登录系统时提示的警告信息 ,比如:
Default Logon Username: root Password: 123456
Linux内核使用initramfs文件系统启动。
下载验征
启动文件系统时,整个系统卡壳在这个地方,控制台没有打印出来。
问题已经找到:在搭建根文件系统的时候,由于不细心,目录树建立不完整。