我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 1121|回复: 0

linux 启动过程-单片机

[复制链接]

该用户从未签到

1万

主题

1292

回帖

2万

积分

管理员

积分
29577

社区居民最爱沙发原创达人社区明星终身成就奖优秀斑竹奖宣传大使奖特殊贡献奖

QQ
发表于 2013-7-30 19:11:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

您需要 登录 才可以下载或查看,没有账号?立即注册

×
安装busybox到文件系统在busybox的根目录下编译好二进制程序之后。#make installPREFIX=/mnt/roofs这样,应用程序就会安装到指定位置,切换到/mnt/rootfs下看看,bin目录,sbin目录,usr/bin目录,usr/sbin目录下是不是出现了很多的应用程序。busybox安装好之后,看看它依赖的动态链接库#lddbusyboxlibm.so.6 => /lib/tls/libm.so.6 (0x40026000)  libcrypt.so.1 => /lib/libcrypt.so.1 (0x40048000)  libc.so.6 => /lib/tls/libc.so.6 (0x42000000)  /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)#cd/mnt/rootfs#cdlib#cp-dpR/lib/libc-2.3.2.so./ #cp-dpR/lib/libc.so.6 ./#cp-dpR/lib/libm*   ./ #cp-dpR/lib/libcrypt-2.3.2.so./ #cp-dpR/lib/libcrypt.so.1 ./ #mkdir tls #ln-slibc-2.3.2.sotls/libc.so.6#ln-slibm-2.3.2.sotls/libm.so.6  5.5.3busybox的init除了基本的命令之外,BusyBox还支持init功能,如同其它的init一样,busybox的init也是完成系统的初始化工作,关机前的工作等等,我们知道在Linux的内核被载入之后,机器就把控制权转交给内核,linux的内核启动之后,做了一些工作,然后找到根文件系统里面的init程序,并执行它,BusyBox的init进程会依次进行以下工作1.   为init设置信号处理过程2.   初始化控制台3.   剖析/etc/inittab文件4.   执行系统初始化命令行,缺省情况下会使用/etc/init.d/rcS5.   执行所有导致init暂停的inittab命令(动作类型:wait)6.   执行所有仅执行一次的inittab(动作类型:once)一旦完成以上工作,init进程便会循环执行以下进程:   1.执行所有终止时必须重新启动的inittab命令(动作类型:once)   2.执行所有终止时必须重新启动但启动前必须询问用户的inittab命令(动作类型:askfirst)  初始化控制台之后,BusyBox会检查/etc/inittab文件是否存在,如果此文件不存在,BusyBox会使用缺省的inittab配置,它主要为系统重引导,系统挂起以及init重启动设置缺省的动作,此外它还会为四个虚拟控制台(tty1到tty4)设置启动shell的动作。如果未建立这些设备文件,BusyBox会报错。   inittab文件中每一行的格式如下所示:(busybox的根目录下的example文件夹下有详尽的inittab文件范例)     id:runlevel:action:process尽管此格式与传统的Sytem Vinit类似,但是,id在BusyBox的init中具有不同的意义。对BusyBox而言,id用来指定启动进程的控制tty。如果所启动的进程并不是可以交互的shell,例如BusyBox的sh(ash),应该会有个控制tty,如果控制tty不存在,Busybox的sh会报错。BusyBox将会完全忽略runlevel字段,所以空着它就行了,你也许会问既然没用保留着它干吗,我想大概是为了和传统的Sytem Vinit保持一致的格式吧。process字段用来指定所执行程式的路径,包括命令行选项。action字段用来指定下面表中8个可应用到process的动作之一。动作结果sysinit为init提供初始化命令行的路径respawn每当相应的进程终止执行便会重新启动askfirst类似respawn,不过它的主要用途是减少系统上执行的终端应用程序的数量。它将会促使init在控制台上显示“Please press Enter to active this console”的信息,并在重新启动之前等待用户按下enter键wait告诉init必须等到相应的进程完成之后才能继续执行once仅执行相应的进程一次,而且不会等待它完成ctratldel当按下Ctrl+Alt+Delete组合键时,执行相应的进程shutdown当系统关机时,执行相应的进程restart当init重新启动时,执行相应的进程,通常此处所执行的进程就是init本身以下是我的usblinux的inittab文件::sysinit:/etc/init.d/rcS ::respawn:/sbin/getty38400tty1 tty2::askfirst:-/bin/sh tty3::askfirst:-/bin/sh ::restart:/sbin/init ::ctrlaltdel:/bin/umount -a -r 这个inittab执行下列动作1.   将/etc/init.d/rcS设置成系统的初始化文件2.   在38400 bps的虚拟终端tty1上启动一个登陆会话 (注意getty的用法)3.   在虚拟终端tty2和tty3上启动askfirst动作的shell4.   如果init重新启动,将/sbin/init设置成它会执行的程序5.   告诉init,在系统关机的时候执行umount命令卸载所有文件系统,并且在卸载失败时用只读模式冲新安装以保护文件系统。5.6系统的配置文件5.6.1. /etc/init.d/rcS文件配置文件一般放在/etc/目录下,5.5.3节说了init初始化命令行的文件是/etc/init.d/rcS,下面是我的rcS文件   #!/bin/sh   /bin/mount -n -t proc/proc/proc   /bin/mount -n -oremount,rw/   /bin/mount -av   /bin/hostname usblinux   /etc/init.d/rc.nic   /etc/init.d/rc.network   /etc/init.d/rc.usb   /etc/init.d/rc.local 1.   安装proc文件系统,但是不写入/etc/mtab文件(mtab文件是df命令读取的文件)2.   以读写模式重新挂载根文件系统(需要/etc/fstab文件)3.   mount -av 挂载所有在/etc/fstab里面列出的文件系统4.   主机名命名为usblinux5.   依次执行rc.nic(自动检测网卡),rc.network(配置网络),rc.usb(加载usb模块),rc.local(执行本地的一些服务)5.6.2. /etc/fstab上面使用mount命令的时候已经涉及到了fstab文件,下面是我的fstab文件/dev/ram0   /   ext2  defaults  0 0 proc    /proc proc  defaults  0 0 关于fstab配置文件的语法可以man fstab其实rcS里面的mount -av没有必要加上去。5.6.3. /etc/mtab这个文件里面的内容是动态变化的,当mount一个文件系统的时候,如果mount 没有加上-n参数,那么安装信息就会写入mtab文件,df命令读取的就是这个文件。5.6.4. /etc/profile这个文件是sh用的,当用户获得一个shell后,sh就会根据这个文件配置用户的登陆环境,下面是我的profile文件。PATH=/bin:/sbin:/usr/bin:/usr/sbin PS1='[u@h W]$ ' HOSTNAME='/bin/hostname' export PATH HOSTNAME PS1 alias l.='ls -d .[a-zA-Z]* --color=tty' alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' export PATH=/usr/local/binPATH export PATH=/usr/local/sbinPATH   其中PATH环境变量指定当用户键入一个命令时,sh寻找这个命令的路径。PS1指定sh提示符的格式其它的export命令,alias命令不用说了吧,busybox里面的ash和bash非常相似,因此只要熟悉bash就会不成问题。5.6.5. /etc/ld.so.conf 与 /etc/ld.so.cache这两个文件是与lib库有关的,它们用来指定应用程序寻找lib库的路径。我的ld.so.conf文件内容如下。/lib /usr/lib /usr/local/lib ld.so.cache里面的内容是由是ldconfig命令生成的,ldconfig根据ld.so.conf配置文件生成ld.so.cache里面的内容,应用程序读取的是ld.so.cache文件,因此如果变动了ld.so.conf文件,需要运行一次ldconfig才能是新的配置生效,另外如果新加了lib库文件,也需要ldconfig。5.6.6 /etc/passwd,/etc/shadow,/etc/groupgroup里面存放的是用户组的信息。我的group文件内容如下:root:x:0:root ftp:x:50: passwd里面存放的是用户的信息我的passwd文件内容如下:root:x:0:0:root:/root:/bin/sh ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin sshd:x:74:74:piviledge-separated SSH:/var/empty/sshd:/sbin/nologin 注意,group和passwd里面的每一行都不是多余的。shadow文件是pam认证用到的密码存放文件5.6.7. /etc/services网络应用程序用到的标准服务端口映射表我的services文件如下:tcpmux  1/tcp tcpmux  1/udp ftp-data20/tcp ftp   21/tcp ssh  22/tcp ssh  22/udp telnet  23/tcp nameserver42/tcp name syslog  514/udp auth  113/tcpauthenticationtap ident 因为我需要开启sshd,syslogd服务,同时会使用ftp,ssh,telnet应用程序。所以就会加上上面的东西,但是注意并不是所有的网络应用程序都会依赖与services文件,比如telnet,但是也许telnetd需要。5.6.8. /etc/nsswitch.conf这个文件的作用很大,没有它很多程序都不能正常运行,关于它的具体作用还是用mannsswitch.conf看看吧。我的nsswitch.conf文件内容如下:passwd: files shadow: files group:  files hosts:  files dns ethers: files netmasks: files networks: files protocols:files services: files netgroup: files publickey:files automount:files aliases:  files 注意hosts这一行一定要加上dns,不然即使有resolv.conf文件,域名也不能解析,注意nsswitch.conf是对应一组lib库的,这里我们用了files,dns,因此需要拷贝相应的lib库到/lib目录下.#cd/mnt/rootfs#cp -dpR/lib/libnss_files* ./lib#cp -dpR/lib/libnss_dns* ./lib5.6.9 ./etc/hosts,/etc/ host.conf, /etc/resolv.conf   我的hosts文件内容如下,不用说也应该清楚什么意思了,不清楚的man hosts   127.0.0.1 localhost:localdomain localhost   host.conf和resolv.conf是域名解析的时候用到的配置文件,其中resolv.conf里面是域名服务器的ip地址,host.conf里面放的是主机的查找规则。不了解的还是man host.conf和manresolv.conf我的host.conf与resolv.conf文件内容分别如下:#cat/mnt/rootfs/etc/host.conf order hosts,bind #cat/mnt/rootfs/etc/resolv.conf nameserver 202.112.20.131 5.6.10./etc/syslog.confsyslogd服务程序读取的配置文件。我的文件内容如下:# Log all kernel messages to the console. # Logging much else clutters up the screen. #kern.*                 /dev/console # Log anything (except mail) of level info or higher. # Don't log private authentication messages! *.info;mail.none;authpriv.none;cron.none      /var/log/messages # The authpriv file has restricted access. authpriv.*                /var/log/secure # Save boot messages also to boot.log local7.*                /var/log/boot.log
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

公告:服务器刚移机,
大家请不要下载东西。
会下载失败


Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

( 闽ICP备2024076463号-1 ) 论坛技术支持QQ群171867948 ,论坛问题,充值问题请联系QQ1308068381

平平安安
TOP
快速回复 返回顶部 返回列表