上个星期,马哥讲了如何给小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!
分享到:
相关推荐
适用于操作系统第3版微课版
linuxQt4下一种登录界面,从博友中的文章中获取的图片。
在使用者是管理维护人员时,更多情况下会使用远程登录管理服务器(易受到网络等因素影响),故更节省资源,更快速的命令行成为首选。 命令行缺点——需要记忆的内容多 命令行界面的使用 Linux启动后,默认进入图形...
Linux系统网络管理模块的实现.pdf
带GUI图形界面登录 带GUI图形界面登录 带GUI图形界面登录 命令行界面登录 图形化界面的注销 基本操作和使用Windows类似; 图形化界面的重启与关机 CentOS7 Linux的启动,以及登录和注销。 图形化界面和命令行界面两种...
Linux驱动第二弹:Linux内核模块.pdf
linux 通过模块实现自己的系统调用,文件中有两个文件夹,分别分用户测试程序,和要加载的模块
QT linux c++界面编程QT linux c++界面编程QT linux c++界面编程QT linux c++界面编程QT linux c++界面编程
光盘介质检查 基本配置:语言、键盘、鼠标 安装类型选择: 磁盘分区、创建文件系统: 引导装载程序配置 网络配置DHCP 防火墙、语言支持、时区配置 超级用户设置 选择安装软件包 开始安装 图形界面配置 3.删除Linux ...
打造字符界面的多媒体Linux系统,Linux在字符界面下应用多媒体,而不必在字符和图形界面转换
一个描述linux内核模块编程的资料,linux驱动编写比可多得的好资料
基于Linux的一个记录客户写入情况的日志模块。 其中附有详细的ReadMe说明和代码注释。 关键字:Linux,日志模块,共享存储,多线程。-Linux-based clients to write a case record log module. One of the ReadMe ...
本书由德国卡尔斯鲁厄大学的Klaus Wehrle、Frank Pahlke、Hartmut Ritter等人合著...能帮助读者更容易理解 Linux网络架构的进程和结构,而且最重要的是,使读者对此有兴趣,并了解一些有关网络概念及其实际应用的东西。
32位linux下的网络调试工具,需要保证你的QT环境变量已经配置,如果没有配置参考:export QTDIR=/usr/local/Trolltech/Qt-4.8.5 export PATH=$QTDIR/bin:$PATH export MANPATH=$QTDIR/man:$MANPATH export LD_...
用 GTK+和GDK开发linux图形用户界面应用
项目六、linux网络服务器的配置与管理 设计要求: ①架设samba服务器或ftp服务器。 ②掌握NFS服务器和客户端的安装与配置。 项目七、linux shell程序设计 设计要求: 1.熟练掌握shell的使用,会编写简单的shell程序...
编写本书是为了向学生和专业人员提供在Linux内核中实现网络功能时所需的基础知识,本书也适合所有希望深入理解操作系统内部网络特定进程的人。本书介绍了Linux内核的关键网络组件及机制,同时也介绍了通信系统的设计...
Linux命令操作界面 启动与关闭系统 Linux的启动与关闭 选择登录用户 选择使用语言 选择启动会话的模式 重新启动 关机 Linux命令基本格式 格式: 命令 [-选项] 参数 例如: 关机操作命令的使用 # shutdown –h 10 ...
Linux安全模块(LSM)是Linux内核的一个轻量级通用访问控制框架。本文介绍Linux安全模块(LSM)的相关背景,设计思想,实现方法;并说明如何使用Linux安全模块(LSM)来增强Linux系统的安全性:一方面是供内核开发...
PDF电子书《用GTK+和GDK开发Linux图形用户界面应用》