欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

打造自己的专属linux(三):添加网络模块,登录界面,开关机 有大用

上个星期,马哥讲了如何给小linux添加设备模块,并实现登录界面,级别1,开关机等等。通过不断的倒腾这个小Linux来更加深入的理解linux系统。


准备工作:1.您应当知道内核模块的概念,可以去我的文章了解下


启动流程 http://blog.csdn.net/deansrk/article/details/6659421


内核模块 http://blog.csdn.net/deansrk/article/details/6666629


2.您应该了解linux的启动流程与启动级别的概念


##更新:一些内核模块相关命令介绍:


modinfo pcnet32

查看模块中对应的详细信息和“依赖信息”,“路径”等

如果以后自己给小linux加模块,需要将依赖的模块也移植过去


/etc/modprobe.conf

系统开机时加载的所有模块,向模块中传递参数信息,如何想开机的时候给模块传递信息,可以编辑它

alias   别名

options  传递参数   (一般不需要手写)


modprobe -r     //卸载某个模块          只需要指定模块名字

                             //不加r   ,加载某个移除模块

modprobe -r floppy   //移除软盘

ls /lib/modules/`uname -r`                // modproce在这里找模块


insmod              插入模块

insmod /PATH/TO/MODULE_FILE 它必须指定模块全路径


lsmod             显示所有模块


rmmod           移除模块,不需要指定路径


depmod       用于自动生成所有模块的依赖关系文件和映射关系文件

                                                        modules.dep           map.dep


总之,如果想要深入理解Linux,那么理论基础必不可少,这样在动手做的时候才知道自己每一步在做什么



#####给小Linux添加网络功能


1.查找pcnet32设备对应的.ko文件 

[root@server56 ~]# modinfo pcnet32

filename:       /lib/modules/2.6.18-164.el5/kernel/drivers/net/pcnet32.ko

2.切换到小linux系统lib目录 

cd /mnt/sysroot/lib

3.创建模块存放目录 

mkdr modules

4. 将mii.ko pcnet32.ko拷贝到这个目录,以我的路径为例,

#pcnet32是vm虚拟机的网卡驱动

cp /lib/modules/2.6.18-164.el5/kernel/drivers/net/pcnet32.ko ./modules

5. 修改rc.sysinit,增加

    [ -e /lib/modules/mii.ko ] && /sbin/insmod /lib/modules/mii.ko                                     #用于启动时加载这个模块

    [ -e /lib/modules/pcnet32.ko ] && /sbin/insmod /lib/modlues/pcnet32.ko

    echo "Load the ethernet card drivers ok"

   

    echo "Set the address fo lo..."

    /sbin/ifconfig lo 127.0.0.1/8

    

    echo "Set the adress for eth0"

    /sbin/ifconfig eth0 192.168.0.145/24   

    

好啦,这样小Linxu就具有网络功能了,你可以切到小linux里试试    



#############实现关机

实现关机简单,只需要两步:

1.编辑 /mnt/sysroot/etc/inittab添加下面这一行

l0:0:wait:/etc/rc.d/rc.shutdown

2.创建脚本文件/mnt/sysroot/etc/rc.d/rc.shutdown添加下面的内容

sync

sleep1

umount  /dev/sda1                    #如果有mtab文件可以直接用umount -a来关闭,/etc/mtab文件时用于记录当前系统所有可以挂载的设备 

umount  /dev/sda2

swapoff -a


exec /sbin/halt -p


ln -s bash sh                                 #给bash 增加一个sh链接,启动的时候如果不指定/bin/bash,则去找sh另外,关机时退出bash,也需要去找shell


#########实现级别 1  


1.在小linux里/etc/inittab里增加           

l1:1:wait:/sbin/init -t1 S                      


2.在启动时,grub界面里e编辑内核引导增加1 来启动级别1           



#########实现登录界面

条件:

1. 启动至少一个终端

2. 打印登录提示给用户

3. /etc/passwd, /etc/shadow, /etc/group, /etc/gshadow

4. Login-->名称服务开端/etc/nsswitch-->库文件

5. 取消rc.sysinit里的/bin/bash 

6. 移植mingetty


这里要解释下linux里帐号密码对应关系

1.linux里定义帐号密码转化的工具:

名称服务开关(name service):定义终端靠谁来查找对应用户的帐号和密码

名称解析: 当系统需要转换帐号和密码信息时所调用的库文件

2.name service相关文件

/usr/lib/libnss开头的文件:这些文件的作用就是name service的转换 

libness_db.so               去数据库中找

               dns                  去DNS服务器找

               files                 去/etc/passwd找

               winbinds         去winbinds服务器找


在拷贝库文件的时候,当拷贝链接时拷贝的是链接指向的文件,但是文件名是链接的命令,

所以,如果拷贝的链接对应的还是链接,那拷贝的就不是我们想要的文件,而是链接

cp命令扩展:

如果/lib/libm.so.1-->/lib/libm.so.2.3.1

cp -d          (如果是链接,保持连接,如果是文件,复制文件)



打印终端步骤:

0.移植mingetty

1. 复制libnss文件到小linux里

[root@server69 LX]# cp -d /usr/lib/libnss3.so /mnt/sysroot/usr/lib/

[root@server69 LX]# cp -d /usr/lib/libnssckbi.so /mnt/sysroot/usr/lib/

[root@server69 LX]# cp -d /usr/lib/libnssutil3.so /mnt/sysroot/usr/lib/

[root@server69 LX]# cp -d /usr/lib/libnss_files.so /mnt/sysroot/usr/lib/

[root@server69 LX]# cp -d /usr/lib/libnss_compat.so /mnt/sysroot/usr/lib/

[root@server69 LX]# cp -d /lib/libnss_files* /mnt/sysroot/lib/

[root@server69 LX]# cp -d /lib/libnss_compat* /mnt/sysroot/lib/


2. 修改inittab增加打印终端  

[root@server69 sysroot]# vim etc/inittab

#tty

1:2345:respawn:/sbin/mingetty tty1

2:2345:respawn:/sbin/mingetty tty2


3.   去除rc.sysinit中的/bin/bash这一行

4.   添加login 

      1)下载地址:http://u.115.com/file/dnhd3x9p

      2)给它执行权限

      3)拷贝它的库文件

      [root@server69 bin]# ldd /bin/login

linux-gate.so.1 =>  (0x00858000)

libcrypt.so.1 => /lib/libcrypt.so.1 (0x06cca000)

libpam.so.0 => /lib/libpam.so.0 (0x00dc2000)

libpam_misc.so.0 => /lib/libpam_misc.so.0 (0x002a2000)

libaudit.so.0 => /lib/libaudit.so.0 (0x00da5000)

libc.so.6 => /lib/libc.so.6 (0x002a7000)

libdl.so.2 => /lib/libdl.so.2 (0x003ef000)

/lib/ld-linux.so.2 (0x00284000)


[root@server69 bin]# cp -d /lib/libcrypt.so.1 ../lib

[root@server69 bin]# cp -d /lib/libcrypt-2.5.so ../lib

[root@server69 bin]# cp /lib/libm.so.6 ../lib


5.拷贝passwd shadow gshadow group到小linxu  /etc里

[root@server69 etc]# head -1 /etc/passwd > passwd

[root@server69 etc]# head -1 /etc/shadow > shadow

[root@server69 etc]# head -1 /etc/group > group 

[root@server69 etc]# head -1 /etc/gshadow > gshadow


6.拷贝nsswitch.conf到小linux的/etc里

[root@server69 etc]# cp /etc/nsswitch.conf .




下篇预告:打造自己的linux(四):百变神器-----BusyBox!

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

作者:deansrk 

来源:CSDN 

原文:https://blog.csdn.net/deansrk/article/details/6670831 

版权声明:本文为博主原创文章,转载请附上博文链接!


来自  https://blog.csdn.net/deansrk/article/details/6670831



linux系统组成之小型RedHat little linux制作三

linux系统组成之小型RedHat little linux制作三

chrinux关注0人评论401人阅读2013-03-31 23:00:57

本文中接“linux系统组成之小型RedHat little linux制作二”

1、rc036.d内增加相关的连接

  1.   mkdir rc3.d  

  2.   cd rc3.d  

  3.   ln -sv ../init.d/tserver S66tserver  

  4.   cd rc0.d  

  5.   ln -sv ../init.d/tserver K33tserver  

  6.   cd rc6.d  

  7.   ln -sv ../init.d/tserver K33tserver  

  8.   修改inittab  

  9.   id:3:initdefault:  

  10.   si::sysinit:/etc/rc.d/rc.sysinit  

  11.   l0:0:wait:/etc/rc.d/rc 0  

  12.   l3:3:wait:/etc/rc.d/rc 3  

  13.   l6:6:wait:/etc/rc.d/rc 6  

  14.   1:2345:respawn:/sbin/mingetty --loginprog=/bin/bash tty1  

  15.   2:2345:respawn:/sbin/mingetty --loginprog=/bin/bash tty2  

  16.   loginprog运行依赖/bin/sh.把bin下的bash连接为sh即可实现  

  17.   修改rc.d/rc.sysinit为  

  18.   #!/bin/bash  

  19.   #  

  20.   echo "welecome chris little linux"


2、增加主机名显示
None--代表没有主机名:

  1. mkdir -p etc/sysconfig/network  

  2. vim nerwork增加  

  3. HOSTNAME=chris.linux  

  4. 新增etc/fstab文件并配置  

  5. sysfs                   /sys                    sysfs   defaults        0 0  

  6.   proc                    /proc                   proc    defaults        0 0  

  7.   /dev/hda1               /boot                   ext3    defaults        0 0  

  8.   /dev/hda2               /                       ext3    defaults        1 1  

  9.  让其以读写的方式重新挂载根系统并增加主机名vim inittab  

  10. #!/bin/bash  

  11. #  

  12. echo "welecome chris little linux"  

  13. mount -n -o remount:rw /  

  14. echo "set the hsotname"  

  15. [ -f /etc/sysconfig/network ] && . /etc/sysconfig/network  

  16. [ -z $HOSTNAME -o "$HSOTNAME" == '(none)' ] && HOSTNAME=localhost

  17. /bin/hostname $HOSTNAME



测试如下:


开启虚拟终端:


由于mingetty需要用户登陆,下面利用agetty来进行登陆验证

利用脚步addshell移植agetty命令


  1. 修改inittab文件  

  2. id:3:initdefault:  

  3. si::sysinit:/etc/rc.d/rc.sysinit  

  4. l0:0:wait:/etc/rc.d/rc 0  

  5. l3:3:wait:/etc/rc.d/rc 3  

  6. l6:6:wait:/etc/rc.d/rc 6  

  7. 1:2345:respawn:/sbin/agetty -n -l /bin/bash 38400 tty1  

  8. 2:2345:respawn:/sbin/agetty -n -l /bin/bash 38400 tty2  



Tty 1终端

Tty 2终端


5、定义系统启动过程中显示的服务启动信息的脚本function

  1. #!/bin/bash  

  2. #  

  3. SCREEN=`stty -F /dev/console size 2>/dev/null`  

  4. COLUN=${SCREEN#* }  

  5. [ -z $COLUN ] && COLUN=80

  6. SPA_COL=$[$COLUN-14]  

  7. RED='\033[31m'

  8. GREEN='\033[32m'

  9. YELLOW='\033[33m'

  10. BLUE='\033[34m'

  11. RONMAL='\033[0m'

  12. success() {  

  13. string=$1  

  14. RT_SPA=$[$SPA_COL-${#string}]  

  15. echo -n "$string"  

  16. for I in `seq 1 $RT_SPA`; do  

  17.   echo -n " "  

  18. done  

  19. echo -e "[   ${GREEN}OK${RONMAL}   ]"  

  20. }  

  21. failure() {  

  22. string=$1  

  23. RT_SPA=$[$SPA_COL-${#string}]  

  24. echo -n "$string"  

  25. for I in `seq 1 $RT_SPA`; do  

  26.   echo -n " "  

  27. done  

  28. echo -e "[ ${RED}FAILED${RONMAL} ]"  

  29. }


然后在tserver等服务脚本内调用function脚本,即可实现显示服务启动的信息等。


  1. #!/bin/bash  

  2. #  

  3. # chkconfig: 35 55 44  

  4. # description: chris service  

  5. #  

  6. . /etc/rc.d/init.d/functions  

  7. FILE=/var/lock/subsys/`basename $0`  

  8. prog=`basename $0`  

  9. start() {  

  10. echo "starting `basename $0`..."  

  11. touch $FILE  

  12. [ $? -eq 0 ] && success "Starting $prog" || failure "Starting $prog"  

  13. }  

  14. stop() {  

  15. echo "stopping `basename $0`..."  

  16. rm -rf $FILE  

  17. [ $? -eq 0 ] && success "Stopping $prog" || failure "Stopping $prog"  

  18. }  

  19. status() {  

  20. if [ -e $FILE ]; then  

  21.    echo "Running.."  

  22. else  

  23.    echo "stopping..."  

  24. fi  

  25. }  

  26. usage() {  

  27. echo "please insernt like start|stop|restart|status"  

  28. }  

  29. case $1 in  

  30. start)  

  31. start ;;  

  32. stop)  

  33. stop ;;  

  34. restart)  

  35.  stop  

  36.  start  

  37. ;;  

  38. status)  

  39. status  

  40. ;;  

  41. *)  

  42. usage  

  43. exit 1  

  44. ;;  

  45. esac



6、为小系统增加网功能(网卡驱动)

   虚拟机的网卡pcnet32的。先查找其驱动模块/pcnet32.ko,而且有依赖于mii.ko模块。

移植驱动模块


mkdir -p /lib/modules
cd /lib/modules
modinfo pcnet32
cp /lib/modules/2.6.18-308.el5/kernel/drivers/net/pcnet32.ko modules/
modinfo mii
cp /lib/modules/2.6.18-308.el5/kernel/drivers/net/mii.ko modules/
配置rc.d/rc.sysinit文件
#!/bin/bash
#
echo "welecome chris little linux"
mount -n -o remount,rw /


echo "set the hsotname"
[ -f /etc/sysconfig/network ] && . /etc/sysconfig/network
[ -z $HOSTNAME -o "$HSOTNAME" == '(none)' ] && HOSTNAME=localhost
/bin/hostname $HOSTNAME

echo "insmod pcnet32 mode"
/sbin/insmod /lib/modules/mii.ko
/sbin/inmod /lib/modules/pcnet32.ko
增加网卡配置文件etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=172.16.7.4
NETMASK=255.255.0.0
GATEWAY=172.16.7.1
ONBOOT=yes


添加必须的配置

  1. 配置etc/init.d/network  

  2. #!/bin/bash  

  3. #  

  4. # chkconfig: 35 09 90  

  5. # description:network servce  

  6. . /etc/rc.d/init.d/functions  

  7. CONF=/etc/sysconfig/network-scripts/ifcfg-eth0  

  8. . $CONF  

  9. start () {  

  10. NETMASK=16

  11.  ifconfig eth0 $IPADDR/$NETMASK up  

  12.  [ -z $GATEWAY ] && route add default gw $GATEWAY  

  13. }  

  14. stop() {  

  15. ifconfig eth0 down  

  16. }  

  17. status () {  

  18.  ifconfig eth0  

  19. }  

  20. usage() {  

  21. ehco "like start,stop,restart"  

  22. }  

  23. case $1 in  

  24. start)  

  25. start  

  26. success "config network eth0 "  

  27. ;;  

  28. stop)  

  29. stop  

  30. success "stop network eth0"  

  31. ;;  

  32. restart)  

  33.  stop  

  34.  Start  

  35.  success "restart network eth0"  

  36.  ;;  

  37. status)  

  38.  status  

  39.  ;;  

  40. *)  

  41. usage  

  42. ;;  

  43. esac



rc.d下创建连接

rc0.d rc3.d rc6.d

cd rc0.d/

ln -sv ../init.d/network K90network

cd rc6.d/

ln -sv ../init.d/network K90network

cd rc3.d/

ln -sv ../init.d/network S09network

配置测序效果如下
















下文接“linux系统组成之小型RedHat little linux制作四”

©著作权归作者所有:来自51CTO博客作者chrinux的原创作品,如需转载,请注明出处,否则将追究法律责任




redhat linux 微型linuxlinux系统基础知识

0

分享

收藏

上一篇:linux系统组成之小型RedH...下一篇:linux系统组成之小型RedH...


普通分类: