手把手带你自制Linux系统之四 添加网络功能
手把手带你自制Linux系统之四 添加网络功能1. 添加系统函数库/etc/rc.d/init.d/functions脚本文件中定义了许多功能函数,用于控制服务脚本的信息显示等。/etc/init.d下的绝大多数脚本或多或少都会使用这些功能。例如在CentOS开机启动时,会看到执行某项操作或启动某个服务是成功还是失败,在右侧会有一个用中括号括起来的单词表示,成功用绿
·
手把手带你自制Linux系统之四 添加网络功能
1. 添加系统函数库
/etc/rc.d/init.d/functions脚本文件中定义了许多功能函数,用于控制服务脚本的信息显示等。/etc/init.d下的绝大多数脚本或多或少都会使用这些功能。例如在CentOS开机启动时,会看到执行某项操作或启动某个服务是成功还是失败,在右侧会有一个用中括号括起来的单词表示,成功用绿色的OK,失败用红色的FAILED,如图所示:
接下来,就添一个functions文件,其中定义两个函数来实现这样的功能。
vi /mnt/sysroot/etc/rc.d/init.d/functions
内容如下:
SCREEN=`stty -F /dev/console size 2>/dev/null`
COLUMNS=${SCREEN#* }
[ -z $COLUMNS ] && COLUMNS=80
SPA_COL=$[$COLUMNS-14]
RED='\033[31m'
GREEN='\033[32m'
YELLOW='\033[33m'
BLUE='\033\34m'
NORMAL='\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${NORMAL} ]"
}
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${NORMAL} ]"
}
使用bincp.sh 移植命令:seq
functions文件的使用方法很简单,只需要在使用功能函数的脚本中source一下/etc/rc.d/init.d/functions即可。function文件中定义了两个shell脚本函数:success和failure,分别在右侧显示绿色的[OK]或红色的[FAILED]
2. 初始化网卡驱动
首先查看网卡信息:
[root@localhost ~]# lspci | grep -i ethernet
02:01.0 Ethernet controller: Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE] (rev 10)
查看网卡的驱动模块:
[root@localhost ~]# lsmod | grep -i PCnet32
pcnet32 35269 0
mii 9409 1 pcnet32
查看pcnet32模块信息可以发现pcnet32依赖mii模块:
[root@localhost sysroot]# modinfo pcnet32
filename: /lib/modules/2.6.18-194.el5/kernel/drivers/net/pcnet32.ko
license: GPL
description: Driver for PCnet32 and PCnetPCI based ethercards
author: Thomas Bogendoerfer
srcversion: F81443556AAE169CBF80F55
alias: pci:v00001023d00002000sv*sd*bc02sc00i*
alias: pci:v00001022d00002000sv*sd*bc*sc*i*
alias: pci:v00001022d00002001sv*sd*bc*sc*i*
depends: mii
vermagic: 2.6.18-194.el5 SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1
parm: debug:pcnet32 debug level (int)
parm: max_interrupt_work:pcnet32 maximum events handled per interrupt (int)
parm: rx_copybreak:pcnet32 copy breakpoint for copy-only-tiny-frames (int)
parm: tx_start_pt:pcnet32 transmit start point (0-3) (int)
parm: pcnet32vlb:pcnet32 Vesa local bus (VLB) support (0/1) (int)
parm: options:pcnet32 initial option setting(s) (0-15) (array of int)
parm: full_duplex:pcnet32 full duplex setting(s) (1) (array of int)
parm: homepna:pcnet32 mode for 79C978 cards (1 for HomePNA, 0 for Ethernet, default Ethernet (array of int)
module_sig: 883f3504bb645aa285b5c47ed7a1e8e11213dc09e2fee057e474ae7754a0f36d5fe683478e403f9e0a08018a727bb9fccb38d536dddc1ca9df78384a8a
所以初始化pcnet32网卡需要用到pcnet32和mii模块。 拷贝这两个模块:
mkdir -pv /mnt/sysroot/lib/modules
cp /lib/modules/2.6.18-194.el5/kernel/drivers/net/mii.ko /mnt/sysroot/lib/modules/
cp /lib/modules/2.6.18-194.el5/kernel/drivers/net/pcnet32.ko /mnt/sysroot/lib/modules/
在rc.sysinit脚本中安装网卡驱动模块:
vi /mnt/sysroot/etc/rc.d/rc.sysinit
加入下面几行:
echo "Initializing network device..."
/sbin/insmod /lib/modules/mii.ko
/sbin/insmod /lib/modules/pcnet32.ko
[ $? -eq 0 ] && success "Initializing newtork device" || failure "Initializing network device"
使用bincp.sh移植命令:insmod, lsmod
3. 配置网卡
网卡驱动安装后可以正常识别网卡,但是想要使用还需要对网卡进行配置,设置IP,网关等信息。
新建网卡配置文件:
mkdir -pv /mnt/sysroot/etc/sysconfig/network-scripts
vi /mnt/sysroot/etc/sysconfig/network-scripts/ifcfg-eth0
加入:
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.198.111
NETMASK=255.255.255.0
GATEWAY=192.168.198.2
ONBOOT=yes
创建网络服务脚本:
cp /etc/rc.d/init.d/network /mnt/sysroot/etc/rc.d/init.d/
vi /mnt/sysroot/etc/rc.d/init.d/network
保留其中前8行内容(文件头信息,为了能够被chkconfig管理),然后使用ifconfig和route命令对网卡进行设置。
#!/bin/bash
#
# chkconfig: 35 09 90
# description: network service
prog=network
. /etc/rc.d/init.d/functions
CONF=/etc/sysconfig/network-scripts/ifcfg-eth0
. $CONF
NETMASK=24
start(){
ifconfig eth0 $IPADDR/$NETMASK
[ -n $GATEWAY ] && route add default gw $GATEWAY
}
stop(){
ifconfig eth0 down
}
status(){
ifconfig eth0
}
usage(){
echo "Usage: $prog {start|stop|status|restart}"
}
case $1 in
start)
start
success "Config network eth0"
;;
stop)
stop
success "Stop network card eth0"
;;
restart)
stop
start
success "Restart network card eth0"
;;
status)
status
;;
*)
usage
exit 1
;;
esac
给网络服务脚本加上执行权限:
chmod +x /mnt/sysroot/etc/rc.d/init.d/network
rc.d目录的0,3,6运行级别中添加对应的软链接:
cd /mnt/sysroot/etc/rc.d/rc0.d
ln -sv ../init.d/network K90network
cd /mnt/sysroot/etc/rc.d/rc3.d
ln -sv ../init.d/network S10network
cd /mnt/sysroot/etc/rc.d/rc6.d
ln -sv ../init.d/network K90network
vi /mnt/sysroot/etc/inittab
添加:
l3:3:wait:/etc/rc.d/rc 3
移植命令:ifconfig, route, ping
4. 激活回环网络设备
打开rc.sysinit
vi /mnt/sysroot/etc/rc.d/rc.sysinit
加入:
ifconfig lo 127.0.0.1/8
[ $? -eq 0 ] && success "Activating loopback network device" || failure "Activating loopback network device"
5. 测试
使用ping 命令测试与网关的连通性,没有问题的话说明前面的步骤没有问题。
6. 总结
加入网络功能后,我们的Mini Linux不再是一个孤立的单机,成为了一台可以与其他计算机互相通信的网络计算机,然后这台Mini Linux就可以实现ssh,web服务等功能。但是还有些小问题没有解决,例如测试结果展示的图片中,提示字符串是[root@(none) ~],其中主机名显示(none),就是因为还没有配置主机名的缘故。另外init是以只读方式挂载根文件系统,整个根文件系统都是不可修改的,解决这个问题需要在启动时重新挂载根为读写方式。这些小问题都将在下章节中解决。
更多推荐
已为社区贡献2条内容
所有评论(0)