欢迎各位兄弟 发布技术文章
这里的技术是共享的
上个星期,马哥讲了如何给小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
chrinux关注0人评论401人阅读2013-03-31 23:00:57
本文中接“linux系统组成之小型RedHat little linux制作二”
1、在rc0、3、6.d内增加相关的连接
mkdir rc3.d
cd rc3.d
ln -sv ../init.d/tserver S66tserver
cd rc0.d
ln -sv ../init.d/tserver K33tserver
cd rc6.d
ln -sv ../init.d/tserver K33tserver
修改inittab
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l3:3:wait:/etc/rc.d/rc 3
l6:6:wait:/etc/rc.d/rc 6
1:2345:respawn:/sbin/mingetty --loginprog=/bin/bash tty1
2:2345:respawn:/sbin/mingetty --loginprog=/bin/bash tty2
loginprog运行依赖/bin/sh.把bin下的bash连接为sh即可实现
修改rc.d/rc.sysinit为
#!/bin/bash
#
echo "welecome chris little linux"
2、增加主机名显示
None--代表没有主机名:
mkdir -p etc/sysconfig/network
vim nerwork增加
HOSTNAME=chris.linux
新增etc/fstab文件并配置
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/hda1 /boot ext3 defaults 0 0
/dev/hda2 / ext3 defaults 1 1
让其以读写的方式重新挂载根系统并增加主机名vim inittab
#!/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
测试如下:
开启虚拟终端:
由于mingetty需要用户登陆,下面利用agetty来进行登陆验证
利用脚步addshell移植agetty命令
修改inittab文件
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l3:3:wait:/etc/rc.d/rc 3
l6:6:wait:/etc/rc.d/rc 6
1:2345:respawn:/sbin/agetty -n -l /bin/bash 38400 tty1
2:2345:respawn:/sbin/agetty -n -l /bin/bash 38400 tty2
Tty 1终端
Tty 2终端
5、定义系统启动过程中显示的服务启动信息的脚本function
#!/bin/bash
#
SCREEN=`stty -F /dev/console size 2>/dev/null`
COLUN=${SCREEN#* }
[ -z $COLUN ] && COLUN=80
SPA_COL=$[$COLUN-14]
RED='\033[31m'
GREEN='\033[32m'
YELLOW='\033[33m'
BLUE='\033[34m'
RONMAL='\033[0m'
success() {
string=$1
RT_SPA=$[$SPA_COL-${#string}]
echo -n "$string"
for I in `seq 1 $RT_SPA`; do
echo -n " "
done
echo -e "[ ${GREEN}OK${RONMAL} ]"
}
failure() {
string=$1
RT_SPA=$[$SPA_COL-${#string}]
echo -n "$string"
for I in `seq 1 $RT_SPA`; do
echo -n " "
done
echo -e "[ ${RED}FAILED${RONMAL} ]"
}
然后在tserver等服务脚本内调用function脚本,即可实现显示服务启动的信息等。
#!/bin/bash
#
# chkconfig: 35 55 44
# description: chris service
#
. /etc/rc.d/init.d/functions
FILE=/var/lock/subsys/`basename $0`
prog=`basename $0`
start() {
echo "starting `basename $0`..."
touch $FILE
[ $? -eq 0 ] && success "Starting $prog" || failure "Starting $prog"
}
stop() {
echo "stopping `basename $0`..."
rm -rf $FILE
[ $? -eq 0 ] && success "Stopping $prog" || failure "Stopping $prog"
}
status() {
if [ -e $FILE ]; then
echo "Running.."
else
echo "stopping..."
fi
}
usage() {
echo "please insernt like start|stop|restart|status"
}
case $1 in
start)
start ;;
stop)
stop ;;
restart)
stop
start
;;
status)
status
;;
*)
usage
exit 1
;;
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 $HOSTNAMEecho "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
添加必须的配置
配置etc/init.d/network
#!/bin/bash
#
# chkconfig: 35 09 90
# description:network servce
. /etc/rc.d/init.d/functions
CONF=/etc/sysconfig/network-scripts/ifcfg-eth0
. $CONF
start () {
NETMASK=16
ifconfig eth0 $IPADDR/$NETMASK up
[ -z $GATEWAY ] && route add default gw $GATEWAY
}
stop() {
ifconfig eth0 down
}
status () {
ifconfig eth0
}
usage() {
ehco "like start,stop,restart"
}
case $1 in
start)
start
success "config network eth0 "
;;
stop)
stop
success "stop network eth0"
;;
restart)
stop
Start
success "restart network eth0"
;;
status)
status
;;
*)
usage
;;
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
分享
收藏