linux上pcnet模块,制做微型linux
----更新:一个脚本能够一键制做这个小Linux,功能没有写的那么多,基本的开机能够了,见附件mklinux----linux
先简述一下开机原理:ios
机器加电--bios读取cmos设定--把控制权交给第一个开机装置MBR,如若是第一个开机装置MBR中没有bootloader则交给第二个,依次类推--MBR中的bootloader程序根据在硬盘中的设置读取内核与一个叫initrd的虚拟文件系统,由于如今的硬盘大都是SATA与SCSI的,内核中不集成这个驱动,经过加载Initrd这个虚拟的文件系统来加载SCSI的驱动,又有同窗问了:为何不把驱动作到内核中呢?这个是由于SCSI的驱动不少,作进去内核会很臃肿--毕竟是虚拟的文件系统,因此要切换到真实的文件系统上来,内核来完成根切换--完成根切换后内核把控制权交给init程序--init读取/etc/inittab它的配置文件,根据配置文件完成初始化。经过看配置文件咱们可知inittab完成这些工做1.默认开机级别 2.调用/etc/rc.d/rc.sysinit完成环境初始化 3.根据默认的开机级别启动不一样的服务脚本 /etc/rc.d/rc 这个脚本完成的任务 4.设定Ctrl+Alt+Del键的做用 5.设定电源UPS管理 6.调用/sbin/mingetty启动6个终端 。6.若是是5级别的话启动图形界面。OK 下面再来讲说rc.sysinit完成的工做:1.初始化网络,设定主机名 2.启动SELinux 3.加密装置 4.设置系统时钟 5.加载驱动 6.启动软raid与LVM 7.启用quota 8.可写方式从新挂载/ 9.启动日志 基本原理就是这样的bash
下面在vmware上来制做一个微型的Linux系统,能基于passwd认证,网络可用,iptables可用,ssh可用,vi可用,其它的都舍去了,其实它就是一个tiny防火墙。网络
环境:vmware8.0 redhat5.8(宿主机) 内核2.6ssh
一.为宿主机添加一块2G大小scsi硬盘,开机。ide
这个我就不演示了。测试
二.在新建的硬盘上创建系统加密
1.对新建的硬盘分区spa
fdisk /dev/sdb ##这个是新加的那个硬盘
n
p
1
1
+50M ##新建一个分区为/boot分区
n
p
2
[回车]
+1G ##新建一个分区为/分区
w ##保存
# partprobe /dev/sdb ##不用重启机器,立马分区生效
# mke2fs –j /dev/sdb1
# mke2fs –j /dev/sdb2 ##格式化两个分区
# mkdir –pv /mnt/{boot,sysroot} ##创建两个目录,用于挂载sdb1,sdb2
# mount /dev/sdb1 /mnt/boot
# mount /dev/sdb2 /mnt/sysroot ##挂载它们
2.提供内核日志
# cp /boot/vmlinuz-`uname -r` /mnt/boot/vmlinuz-tiny ##用宿主机的内核
3.提供Initrd这个用于切换根分区的文件,这个文件不一样系统是不同的,下面咱们修改原来的。
# cp /boot/initrd-`uname -r`.img /tmp/initrd.gz
# cd /tmp
# gzip –d initrd.gz ##解压后type initrd可知为cpio压缩的,下面用cpio解压
# mkdir init
# cd init
# cpio –ivcdu <..>
# vi init ##编辑它
#resumeLABEL=SWAP-sda3 ##注释这个swap分区,由于咱们没有启用swap
mkrootdev -t ext3 -o defaults,ro /dev/sda2 ##把咱们新建的第二个分区未来看成根分区,看好是sda2
##由于把这个磁盘放到新机器上它就是sda2
保存,退出
# find . | cpio –ovcB | gzip –9>/mnt/boot/initrd-tiny
3.为磁盘安装grub,分两个步骤,先安装/boot/grub这个配置部分,再安装MBR中的程序部分
# grub-install –root-directory=/mnt /dev/sdb ##程序会到/mnt下找boot目录,在boot下生成grub的配置目录,
##/dev/sdb表明安装到MBR中
# ls /mnt/boot 查看是否生成了grub目录 ,若是有则继续
# grub
>root (hd1,0)/ ##输入 root (hd1,0)/ 按TAB查看有没有刚才拷贝的vmlinuz-tiny,有的话继续
>setup (hd2) ##安装到MBR中
为grub创建配置文件/mnt/boot/grub/grub.conf
# vi /mnt/boot/grub/grub.conf
default=0
timeout=3
title A Tiny Linux
root (hd0,0)
kernel /vmlinuz-tiny
initrd /initrd-tiny
到此grub安装完毕
4.在/mnt/sysroot 下创建必备的目录
# mkdir -pv /mnt/sysroot/{root,sbin,bin,usr/{lib,sbin,bin},etc/rc.d,var,\
proc,sys,tmp,dev,lib,home}
5.移植init这个程序到/mnt/sysroot下
# which init #可知Init在/sbin/下
# ldd /sbin/init 查看依赖的库文件
把init与下面显示的库文件复制到相对应的位置
# cp /sbin/init /mnt/sysroot/sbin/init
# cp /lib/libsepol.so.1 /mnt/sysroot/lib
# cp /lib/libselinux.so.1 /mnt/sysroot/lib
# cp lib/libc.so.6 /mnt/sysroot/lib
# cp /lib/libdl.so.2 /mnt/sysroot/lib
# cp /lib/ld-linux.so.2 /mnt/sysroot/lib
6.以一样方式移植bash,方法同上,我就不写了
7.有了这两个程序,在添加以下配置文件系统就能够启动了
# vi /mnt/sysroot/etc/inittab
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
# vi /etc/rc.d/rc.sysinit
#!/bin/bash
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
echo "Welcome to Tiny Linux"
/bin/bash
chmod +x /mnt/sysroot/etc/rc.d/rc.sysinit
到此系统基本能够启动了,下面测试
休眠宿主机,新建虚拟机,选择磁盘时选已存在的磁盘,用刚才的磁盘
测试可否启动到bash,若是能则继续
三.添加一些命令,并支持密码认证,hostname,并支持网络
你是否发现copy命令与库时很麻烦,下面提供个脚本cp.sh,用来copy命令与库的,关闭tinylinux,打开宿主机继续吧
# vi cp.sh
function cpbin {
if which $1 &>/dev/null; then
local binpath=$(which --skip-alias $1)
else
return 10
fi
if [ ! -d /mnt/sysroot${binpath%/*} ];then
mkdir -p /mnt/sysroot${binpath%/*}
fi
if [ ! -e /mnt/sysroot/$binpath ];then
cp $binpath /mnt/sysroot/$binpath
else
return 11
fi
}
function cplib {
if which $1 &>/dev/null;then
local binpath=$(which --skip-alias $1)
else
return 10
fi
modules=$(ldd $binpath | grep -o '[^[:space:]]*/lib/[^[:space:]]\+')
for I in $modules
do
[ ! -e /mnt/sysroot$I ]&& cp $I /mnt/sysroot/$I
done
}
while : ;do
read -p "A command (q to exit): " cmd
if [ $cmd != "q" ];then
stat=
cpbin$cmd
stat=$?
if [ $stat== "10" ] ;then
echo "No such Command"
elif [ $stat== "11" ];then
echo "$cmd have been existed "
else
cplib $cmd
fi
else
break;
fi
done
给个执行权限,就拷贝须要的命令吧!!
1.拷贝 ls mv cat cp ifconfig ping vi iptables mingetty login depmod modprobe hostname mount shudown reboot sync halt poweroff
# sh cp.sh 输入以上命令便可
2.修改/mnt/sysroot/etc/inittab 以下
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
1:2345:respawn:/sbin/mingetty tty1 ##就添加了几个虚拟终端
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
init 调用mingetty来启动虚拟终端,mingetty会调用login来让用户登录,而login会调用pam接口来认证用户的帐号密码,pam对这个tinylinux来讲,显的太大了,因而咱们用修改过的login程序直接调用/etc/passwd /etc/shadow 来认证吧,上面移植那个login是为了库文件,修改过的login在附件中
4.下载login,copy到/mnt/sysroot/bin下,并给执行权限
# chmod +x /mnt/syroot/bin/login
5.创建/etc/passwd /etc/shadow /etc/group ,直接用系统上的吧
# grep ^root /etc/passwd>/mnt/sysroot/etc/passwd
# grep ^root /etc/group >/mnt/sysroot/etc/group
# grep ^root /etc/shadow >/mnt/sysroot/etc/shadow
# chmod 400 /mnt/sysroot/etc/shadow
或许你觉得认证应该完了,其实login会调用/lib/libnss开头的库文件,把它们与它们的配置文件/etc/nsswitch.conf 移植过去
# cp /etc/nsswitch.conf /mnt/sysroot/etc/
# cp /lib/libnss* /mnt/sysroot/lib/
6.通常内核编译时网卡驱动被编译成模块,好比vmware须要的pcnet32模块,因此咱们要移植过去,固然还有它依赖的mii模块。iptables须要的模块有不少,咱们不可能一个个的加载. # find /lib/modules/2.6.18-308.el5/kernel/ | grep netfilter 发现netfilter的模块的主要目录,移植过去。
# modinfo pcnet32 ##查看pcnet32的位置,及依赖模块
# modinfo mii ##查看mii的位置,没有依赖任何模块
移植它们
# mkdir -pv /mnt/sysroot/lib/modules/2.6.18-308.el5/kernel/drivers/net/ipv4
# cp /lib/modules/2.6.18-308.el5/kernel/drivers/net/pcnet32.ko \
/mnt/sysroot/lib/modules/2.6.18-308.el5/kernel/drivers/net/
# cp /lib/modules/2.6.18-308.el5/kernel/drivers/net/mii.ko \
/mnt/sysroot/lib/modules/2.6.18-308.el5/kernel/drivers/net/
# cp /lib/modules/2.6.18-308.el5/kernel/net/netfilter/ \
/mnt/sysroot/lib/modules/2.6.18-308.el5/kernel/drivers/net/
# cp /lib/modules/2.6.18-308.el5/kernel/net/ipv4/netfilter/ \
/mnt/sysroot/lib/modules/2.6.18-308.el5/kernel/drivers/net/ipv4/
# chroot /mnt/sysroot/
# depmod ##生成依赖关系以便modprobe加载
iptables 依赖/lib/iptables 下的模块,移植过去
# cp /lib/iptables /mnt/sysroot/lib/
7.修改/mnt/sysroot/etc/rc.d/rc.sysinit,以下
#!/bin/bash
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
echo "Welcome to Tiny Linux"
modprobe pcnet32
modprobe iptable_filter
modprobe iptable_nat
mount -o rw /
ifconfig eth0 172.16.1.2/16
hostname www.laoguang.me
export PS1='[\u@\h \W]\$'
休眠宿主机,启动tinylinx,哇,须要验证了,输入你宿主机root的帐号密码,登录成功,这时ifconfig 你会发现eth0有ip了,世界立马美好了好多。
8.移植/etc/sysctl.conf 并修改ip_forward的值
# cp /etc/sysctl.conf /mnt/sysroot/etc/
# vi /mnt/sysroot/etc/sysctl.conf
net.ipv4.ip_forward=1
开机测试
# iptables -A INPUT -p icmp -j DROP
ping 一下别的主机测试
头疼,移植Dropbear实现ssh有空再写。。。。。。。。
linux上pcnet模块,制做微型linux相关推荐
- Tiny Core Linux 4.5 发布,微型 Linux 操作系统
世界上最小的Linux桌面发行版--Tiny Core Linux 今天发布了4.5版本. Tiny Core Linux是一个基于Linux2.6版本内核,采用BusyBox.Tiny X.FLTK ...
- linux上安装shell编辑器与linux运维面试题
分两个部分 一.安装B-shell解释器 安装cygwin Eclipse要找到安装的bin路径 https://cygwin.com 二.安装编辑器shellEd 下载可以得到一个:net.sou ...
- linux上安装osg_如何在 Linux 上安装并启用 Flatpak 支持? | Linux 中国
Flatpak 提供了一种通用的包封装格式,可以在任何 Linux 发行版中使用.它提供了一个沙箱(隔离的)环境来运行应用程序,不会影响其他应用程序和发行版核心软件包.-- Magesh Maruth ...
- Linux从头开始学--学习笔记9知识点补充-ubuntu,centos;在linux上创建c程序;linux基础命令,shell命令,vi命令,man帮助手册
这是我从头开始学习Linux的学习笔记,后续还会更新. 记录自己的技术成长,也希望和大家分享交流,欢迎关注~ 本笔记为coursera网站课程<Linux for Developers>的 ...
- 操作系统课程设计:Linux系统调用/基于模块的文件系统/Linux驱动/统计Linux系统缺页的次数 整合
目录 一.可选题目 题目1:新增Linux系统调用 题目2:实现基于模块的文件系统 题目3:新增Linux驱动程序 题目4:统计Linux系统缺页的次数 二.操作顺序 附录:参考资料 题1 题2 题3 ...
- 在linux上编译错误,Daemontools 在 Linux上编译错误解决
在Linux上编译daemontools出现错误 执行install出现 /usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .t ...
- linux离线安装redmine_9 款 Linux 上的最佳笔记应用 | Linux 中国
无论你做什么,做笔记总是一个好习惯.https://linux.cn/article-12307-1.html作者:Ankush Das译者:Xingyu.Wang 无论你做什么,做笔记总是一个好习惯 ...
- sqlserver linux 付费吗_9 款 Linux 上的最佳笔记应用 | Linux 中国
无论你做什么,做笔记总是一个好习惯. 来源:https://linux.cn/article-12307-1.html 作者:Ankush Das 译者:Xingyu.Wang 无论你做什么,做笔记总 ...
- linux上类似迅雷的软件,linux下有没有像迅雷或者快车的那种下载软件?
clark_2011 于 2011-04-02 17:17:55发表: 学习中! teber 于 2011-04-02 11:39:13发表: 一直用迅雷,看来下东西还要两个系统来回切了, 要是能多台 ...
最新文章
- 从《黑客帝国》说起,我们如何证明这个世界不是一个系统?
- 浅析营销型网站SEO优化的四大原则!
- go语言的channel特性
- linux内核版本 2.6.39,linux – 为什么这个内核模块在2.6.39上被标记为永久
- 数据与程序分离——程序中那些表的事儿
- 云计算的认识和看法_云存储已经成为存储的未来,你的存储跟上节奏了吗?
- 综述 | 知识图谱实体链接:一份“由浅入深”的综述
- Spring-context-ApplicationEvent/ApplicationListener/ApplicationEventMulticaster
- 机器学习基础(四十四)—— 优化
- c语言c99标准_从年薪10万到年薪30万,C语言程序员必读的5本书
- Security+认证学习/备考经验
- Json时间格式转换
- 中文字体的英文名称(宋体 微软雅黑)
- 基本存款账户编号怎么查_基本存款账户编号是行号吗?
- 【一起学加密4】一次性密码本
- IE浏览器调用jquery需要注意的小问题
- 华为 服务器 驱动 linux,华为服务器SAS控制器驱动问题
- QQ音乐 最新歌曲源 API(稳定)
- 【鸿蒙】HarMonyOS之Text组件的常用属性
- 关于Firefox 3.x 火狐的旧插件