`
shinfocom
  • 浏览: 1188063 次
文章分类
社区版块
存档分类
最新评论

打造自己的专属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!



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics