如何私人订制裁剪Linux
一、系统启动流程:
1、POST-->BIOS(Boot Sequence)--> BootLoader(MBR)--> Kernel(initrd,initramfs)--> init (/etc/inittab)
第一步首先加电自检,计算机本身不会执行程序,由此它会载入一段程序,它会在开机时自动实现将某个RAM中的程序映射到cpu可以寻址的地址空间中去,并且可以让cpu可以执行其中的指令,而这些指令是完成系统检测的,检测完成之后,当所有的硬件或基本的核心硬件没有问题的话就进行BIOS。根据BIOS中所设定的程序启动流程去找与其对应设备上的MBR,按照引导次序执行(Boot Sequence),根据引导次序逐个查找对应的存储设备上的MBR,若MBR存在,则读取MBR上的BootLoader,BootLoader是一段程序,早期的MBR总共512字节,但它留给BootLoader空间大小是446字节,在BootLoader当中配置了所有引导的操作系统的内核的位置,因此BIOS在载入内存以后,当它实现将控制流程或控制权限转交给BootLoader以后,BootLoader就接收了整个系统的控制权限,而后根据用户的选择,去读取相应操作系统的内核。第三步:将内核装载进内核中合适的位置,解压缩并完成内核初始化,BootLoader会把控制权限转交给内核。第四步:如果内核访问根文件系统的设备需要用到某个驱动程序,而内核中也没有,就需要到根文件中去找这个驱动程序,但这文件系统本身又没有挂载,因此要想访问根文件系统得先找到驱动,要访问驱动得先找到根文件系统,这就出现了一个难题,这时就要借助于initrd,为内核提供访问真正的根文件系统所需要的基本驱动程序。因此initrd是一个辅助性的、过渡性的中间层。它能够实现将kernel与真正的根文件系统连接起来,当连接完成之后它就没有任何意义了。第五步:执行init进程,而init程序本身的配置文件是/etc/inittab(而在红帽6上init不在是传统的init,而是upstart,而upstart的配置文件在/etc/inittab和/etc/init/.*conf下的所有文件
2、(kernel)内核初始化:
硬件探测
装载驱动
挂载根文件系统(rootfs)
启动用户空间中的第一个进程init
3、init所要完成的工作主要取决于/etc/inittab,而 /etc/inittab所要完成的任务有很多:设定默认运行级别;系统初始化脚本(/etc/rc.d/rc.sysinit);运行指定级别的服务脚本:/etc/rc.d/init.d/。连接到:/etc/rc.d/rc#.d(rc0.d--rc6.d),而链接文件比较独特,有的是以K开头的文件,有的是以S开头的文件,这两种文件的后面都跟有一个数字(00-99),而这些数字是运行次序或者说是执行次序。一般来说数字越小,运行级别越高(越先被执行)。而这些链接文件都是通过chkconfig实现的。run运行指定级别的脚本完成之后,设定Ctrl、Alt、Delete三个键的意义,还有设定突然断电时怎么办?电源又恢复的时候怎么办?但这些任务对我们来说并不是最关键的,接下来启动虚拟终端、启动图形终端
4、/etc/rc.d/rc.sysinit:系统初始化,大概执行以下任务:(注意:内核在装载根文件系统时为了避免文件损坏,是以只读方式挂载的)
检测并以读写方式重新挂载根文件系统;设定主机名;检测并挂载/etc/fstab中的其它文件系统;启动swap分区;初始化外围硬件设备的驱动;根据/etc/sysctl.conf设定内核参数;**udev和selinux;**LVM和RAID设备;清理过期锁和PID文件;装载键映射;
二、制作自己的小linux:
1、学了那么久的linux了,我们也应该有一个属于自己制作的小linux了,而小linux所要实现的功能有一下几部分:
1)、关机和重启;shutdown -r now 重启;shutdown -h now:关机; halt关机; reboot重启; poweroff关机
2)、主机名;
3)、运行对应服务脚本;
4)、启动终端;
5)、运行用户;
6)、定义单用户级别;
7)、装载网卡驱动,启用网络功能;
8)、提供一个web服务器;
9)、设定内核参数;
这些做完后我们的小linux就算是真正的完成了,但我们发现这个小linux每用到一个命令都要移植,这是比较麻烦的,因为你不仅要移植命令还要移植文件所依赖的库,那接下来我们就做到linux真正的裁剪和定制。
2、我们有一个项目叫busybox,它是一个命令也是一个二进制程序,但是他有很多链接,不到1M大小,一个命令可以模拟几百个命令使用,例如你拿它当ls用,它就是ls等等、、、、我们可以使用一个1M的busybox手动制作一个内核(kernel),因此我们不需要移植太多的模块,只需要移植一些最最基本的就可以了。
下面我们就来制作一个属于自己的小linux
开始之前先把虚拟机安装好,这里我用的是linux-5.8的版本,安装好后,再添加一个盘进来,为了便于区别我安装了一块IDE的盘
1、创建分区(在这里我们创建2个2G的主分区)
partprobe /dev/hda #重读磁盘分区
cat /proc/partitions #查看分区列表
2、创建挂载点,mkdir /mnt/{boot,sysroot}其中hda1挂载在/mnt/boot;hda2挂载在/mnt/sysroot
mkdir /mnt/{boot,sysroot} -pv # 创建挂载点
mke2fs -j /dev/hda1 #格式化
mke2fs -j /dev/hda2
mount /dev/hda1 /mnt/boot #挂载设备
mount /dev/hda2 /mnt/sysroot
mount #查看是否挂载成功
3、切记虽然挂载好了,但挂载点里面没有任何文件,下面我们复制内核
cp /boot/vmlinuz-2.6.18-308.el5 /mnt/boot/vmlinuz
为了便于解压缩,我在这里建一个test目录
mkdir test
cd test
zcat /boot/initrd-2.6.18-308.el5.img | cpio -id
vim init #编辑配置文件
cd lib/ #里面有很多的dm模块,没有用,就删了
rm -f dm-* #删除dm开头的模块文件
find . | cpio -H newc --quit -o | gzip -9 > /mnt/boot/initrd.gz #(先备份出来)
ls -lh /mnt/boot/ #检验
grub-install --root-directory=/mnt /dev/hda #安装grub
ls /mnt/boot #校验一下是否有grub
vim /mnt/boot/grub/grub.conf #编辑配置文件
default=0
timeout=5
title my linux(2.6.18)
root (hd0,0)
kernel /vmlinuz
initrd /initrd.gz
提供真正的根文件系统
cd /mnt/sysroot
mkdir etc/rc.d/init.d bin sbin proc sys dev lib root mnt media var/{log,run,lock/subsys,tmp} usr/{bin,sbin,local} tmp home opt boot -pv #创建所需的根文件系统
vim etc/inittab # 编辑配置文件
id:3:initdefault: #设定默认运行级别
si::sysinit:/etc/rc.d/rc.sysinit #系统初始化脚本
vim etc/rc.d/rc.sysinit #编辑编辑初始化脚本
#!/bin/bash
echo -e "\tWelcome to \033[1;34mMagedu linux\033[0m"
/bin/bash #执行/bin/bash
chmod +x etc/rc.d/rc.sysinit #给配置文件执行权限
复制命令的脚本:在根目录下编辑bincp.sh
vim bincp.sh #复制二进制程序及其依赖的库文件的脚本
#!/bin/bash
#
DEST=/mnt/sysroot
libcp() {
LIBPATH=${1%/*}
[ ! -d $DEST$LIBPATH ] && mkdir -p $DEST$LIBPATH
[ ! -e $DEST${1} ] && cp $1 $DEST$LIBPATH && echo "copy lib $1 finished."
}
bincp() {
CMDPATH=${1%/*}
[ ! -d $DEST$CMDPATH ] && mkdir -p $DEST$CMDPATH
[ ! -e $DEST${1} ] && cp $1 $DEST$CMDPATH
for LIB in `ldd $1 | grep -o "/.*lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`; do
libcp $LIB
done
}
read -p "Your command: " CMD
until [ $CMD == 'q' ]; do
! which $CMD &> /dev/null && echo "Wrong command" && read -p "Input again:" CMD && continue
COMMAND=` which $CMD | grep -v "^alias" | grep -o "[^[:space:]]\{1,\}"`
bincp $COMMAND
echo "copy $COMMAND finished."
read -p "Continue: " CMD
done
chmod +x bincp.sh #给文件执行权限
复制这些命令:init,bash,ls,touch,mkdir,cat ,mount,umount,vim,vi,chmod,chown,cp,ping,route,reboot,halt,shutdown,hostname,注意每添加一个命令都要复制过来
sync(多同步几次)
验证:
4、新建一个虚拟机,使用我们刚才添加的IDE盘,验证一下看能否启动:
注意:启动小linux完成之后它无法自动完成将根文件系统挂载可读写
而mount –n:挂载时不更新/etc/mtab文件
我们在touch一个文件:
5、现在这个小系统还不能关机,重启,接下来我们就让它可以实现关机,重启的功能:切回到宿主机:给我的小系统提供脚本,来实现系统关机、重启的功能
cd /mnt/sysroot
etc/rc.d/rc.sysdone #脚本,可用于实现微型的Linux系统关机
#!/bin/bash
#
sync
sleep 2
sync
mount | awk '{print $3}' | grep -v -E "\/(dev|proc|sys)?$" | sort -r | while read LINE; do
umount -n -f $LINE
[ $? -eq 0 ] && echo "Unmount $LINE finished." || echo "Can not unmount $LINE."
done
mount | awk '{print $3}' | while read LINE; do
mount -n -o remount,ro $LINE
[ $? -eq 0 ] && echo "Remount $LINE finished." || echo "Can not remount $LINE."
done
exec /sbin/halt -p
chmod +x etc/rc.d/rc.sysdone #给脚本一个执行权限
注意每添加一个命令都要通过bincp.sh脚本复制过去
vim etc/inittab
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc.sysdone #切换到0级别时要执行/etc/rc.d/rc.sysdone
l6:6:wait:/etc/rc.d/rc.reboot #切换到6级别时要执行/etc/rc.d/rc.reboot
vim etc/rc.d/rc.reboot #编辑reboot脚本(重启脚本)
#!/bin/bash
#
sync
sleep 1
sync
exec /sbin/reboot #执行这个脚本
chmod +x etc/rc.d/rc.reboot #给执行权限
vim etc/rc.d/rc.sysdone #关机脚本
#!/bin/bash
#
sync
sleep 2
sync
exec /sbin/halt -p
chmod +x etc/rc.d/rc.sysdone
验证关机与重启功能:
注意:注意如果在此处修改小系统,再回到宿主机,系统可能会崩溃,如果崩溃就用下面的命令修复
cd /mnt/sysroot/
find . | cpio -H newc --quiet -o | gzip > /root/sysroot.gz(把所有的大小打包起来)
cd
umount /mnt/sysroot(若卸不掉就使用fuser -km /dev/hda2)
mke2fs -j /dev/hda2 #重新格式化
mount /dev/hda2 /mnt/sysroot/ #重新挂载
cd /mnt/sysroot
zcat /root/sysroot.gz | cpio -id (展开所有打包的文件)
sync(多执行几次)
6、我们也可以用一个脚本即完成关机又完成重启:
cd /mnt/sysroot/
vim etc/rc.d/init.d/halt
#!/bin/bash
#
case $0 in
*reboot)
COMMAND='/sbin/reboot' ;;
*halt)
COMMAND='/sbin/halt -p' ;;
*)
echo "Only call this script by *reboot OR *halt;" ;;
esac
case $1 in
start) ;;
stop) ;;
*)
echo "Usage:`basename $0` {start|stop}" ;;
esac
exec $COMMAND
chmod +x etc/rc.d/init.d/halt
为halt创建链接:
cd etc/rc.d/
mkdir rc0.d rc6.d #创建两个目录
cd rc0.d/
ln -sv ../init.d/halt S99halt
cd ..
cd rc6.d/
ln -sv ../init.d/halt S99reboot
而rc.reboot rc.sysdone这时已经没用了,那我们就把它删了
rm -rf rc.sysdone rc.reboot
创建rc脚本:把所有S开头的都start,把所有K开头的都stop
vim etc/rc.d/rc
#!/bin/bash
#
RUNLEVEL=$1
for I in /etc/rc.d/rc$RUNLEVEL.d/K*; do
$I stop
done
for I in /etc/rc.d/rc$RUNLEVEL.d/S*; do
$I start
done
chmod +x etc/rc.d/rc
vim etc/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 #为3级别创建目录
l6:6:wait:/etc/rc.d/rc 6
cd etc/rc.d/
mkdir rc3.d
vim etc/rc.d/init.d/tserver #脚本,测试SysV服务的定义格式:
#!/bin/bash
#
# chkconfig: 35 66 33 #通过chkconfig控制
# description: test service script
#
. /etc/rc.d/init.d/functions #这个脚本在下面
prog=tserver
lockfile=/var/lock/subsys/$prog
start() {
touch $lockfile
[ $? -eq 0 ] && success "Starting $prog" || failure "Staring $prog"
}
stop() {
rm -f $lockfile
[ $? -eq 0 ] && success "Stopping $prog" || failure "Stopping $prog"
}
status() {
if [ -f $lockfile ]; then
echo "Running..."
else
echo "Stopped..."
fi
}
usage() {
echo "Usage: $prog {start|stop|status|restart}"
}
case $1 in
start)
start ;;
stop)
stop ;;
restart)
stop
start ;;
status)
status ;;
*)
usage
exit 1 ;;
esac
chmod +x init.d/tserver
cd rc3.d #为3级别创建链接文件
ln -sv ../init.d/tserver S66tserver
ln -sv ../init.d/tserver S33tserver
vim etc/inittab #添加终端
1:2345:respawn:/sbin/agetty -n -l /bin/bash 38400 tty1
2:2345:respawn:/sbin/agetty -n -l /bin/bash 38400 tty2
注意每添加一个功能都要在小系统中验证一下
7、要想让根文件系统重新挂载可读写,先编辑etc/fstab配置文件
vim etc/fstab
/dev/hda2 / ext3 defaults 0 0
/dev/hda1 /boot ext3 defaults 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
vim etc/rc.d/rc.sysinit
#!/bin/bash
#
echo -e "\tWelcome to \033[34mMageEdu\033[0m Linux"
echo "Remount rootfs..."
mount -n -o remount,rw /
echo "Set the hostname..."(设定主机名)
[ -f /etc/sysconfig/network ] && . /etc/sysconfig/network #判定文件是否存在
[ -z $HOSTNAME -o "$HOSTNAME" == '(none)' ] && HOSTNAME=localhost #判定主机名是否存在或为空
/bin/hostname $HOSTNAME
echo "Initializing network device..."
/sbin/insmod /lib/modules/mii.ko #cp 模块以后添加进来
/sbin/insmod /lib/modules/pcnet32.ko
mkdir etc/sysconfig
vim etc/sysconfig/network
HOSTNAME=minilinux.magedu.com #添加主机名
vim 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} ]"
}
mkdir lib/modules #创建模块文件
cp /lib/modules/2.6.18-308.el5/kernel/drivers/net/pcnet32.ko/mnt/sysroot /lib/modules
cp /lib/modules/2.6.18-308.el5/kernel/drivers/net/mii.ko /mnt/sysroot/lib/modules/
8、添加IP地址
mkdir -pv etc/sysconfig/network-scripts #先创建目录
vim etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.1.150
NETMASK=255.255.255.0
GATEWAY=172.16.0.1
ONBOOT=yes
vim etc/rc.d/init.d/network
#!/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
start() {
ifconfig eth0 $IPADDR/16 up
[ -z $GATEWAY ] && route add default gw $CATEWAY
}
stop() {
ifconfig eth0 down
}
status() {
ifconfig eth0
}
usage() {
echo "$prog:{start|stop|restart|status}"
}
case $1 in
start)
success "Config network eth0" ;;
stop)
success "Stop network card eth0" ;;
restart)
stop
start
success "Restart network card eth0" ;;
status)
status ;;
*)
usage
exit 1 ;;
esac
chmod +x etc/rc.d/init.d/network #执行权限
要想能在级别0,3,6下启动,需要创建链接
cd etc/rc.d/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
用户登陆时显示的信息设置
vim /mnt/sysroot/etc/issue 添加如下内容
My Linux
Kernel \r on an \m #内核版本号
设定内核参数:
vim /mnt/sysroot/etc/sysctl.conf 内容如下:
net.ipv4.ip_forward = 1
编辑/mnt/sysroot/etc/rc.d/rc.sysinit文件 添加以下内容
sysctl -p &> /dev/null #IP地址立即生效
9、添加用户功能
使用不依赖与PAM的login程序
放到/mnt/sysroot/bin/目录下,之后赋予它执行权限
登陆时是使用login程序来验证登陆的,实现用户认证是到特定的文件中去认证的,传统的方式都是
放在/etc/passwd以及/etc/shadow
nsswitch是个框架,它能够完成配置到哪个去找用户的账号及密码;nsswitch就是依靠配置文件来定义的
nsswitch这个框架由库和相对应的配置文件来组成,在配置文件中可直接定义基于哪个库去去找相应的验证文件
例如:在/ect/passwd认证所找的是libnss_file.so这样的库
vim /mnt/sysroot/etc/nsswitch.conf 内容如下:
passwd: files
shadow: files
group: files
hosts: files dns
复制库文件
cp -d /lib/libness_file* /mnt/sysroot/lib/
cp -d /usr/lib/libnss_files.so/mnt/sysroot/usr/lib/
cp -d /usr/lib/libnss3.so /usr/lib/libnssckbi.so /usr/lib/libnssutil3.so /mnt/sysroot/lib/
创建用户
这里直接从本系统上复制一个用户过来
grep -E "^root\> /etc/passwd > /mnt/sysroot/etc/passwd
grep -E "^root\> /etc/shadow > /mnt/sysroot/etc/shadow
grep -E "^root\> /etc/group> /mnt/sysroot/etc/group
修改inittab文件,现在可以改为让输入用户的登陆方式了
vim /mnt/sysroot/etc/inittab 整体内容如下内容如下:
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l3:3:wait:/etc/rc.d/rc 3
l6:6:wait:/etc/rc.d/rc 6
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
到这里用户功能的添加就完成了。
补充:
对/mnt/sysroot/etc/rc.d/rc.sysinit配置的整体修改,来实现对界面的进一步美化,代码如下:
#!/bin/bash
#
. /etc/rc.d/init.d/functions
echo -e "\tMy\033[34mMagedu.com\033[0mLinux"
echo "Remount rootfs...."
mount -n -o remount,rw /
[ $? -eq 0 ] && success "Remount rootfs" || failure "Remount rootfs"
mount -a
[ $? -eq 0 ] && success "Mount others filesystem" || failure "Mount others filesystem"
#Set the hostname.....
[ -f /etc/sysconfig/network ] && . /etc/sysconfig/network
[ -z $HOSTNAME -o "$HOSTNAME" == '(none)' ] && HOSTNAME=localhost
/bin/hostname $HOSTNAME
[ $? -eq 0 ] && success "Set the hostname" || failure "Set the hostname"
# Initializing network device....
/sbin/insmod /lib/modules/mii.ko
/sbin/insmod /lib/modules/pcnet32.ko
[ $? -eq 0 ] && success "Initializing network device" || failure "Initialization network device"
ifconfig lo 127.0.0.1/8
[ $? -eq 0 ] && success "Activating loopback network device" || failure "Activating loopback network device"
sysctl -p &> /dev/null
[ $? -eq 0 ] && success "Set kernel parameter" || failure "Set kernel paramenter"
属于自己的小linux就做好了,虽然不是很完善,但是也很好用的,赶快试试吧!
转载于:https://blog.51cto.com/jilili/1168229
===============================================================================================================================================================================================================
Centos linux系统裁剪
1、简介
最近为了更加了解linux系统的启动过程,通过对系统进行裁剪的的方式来了解整个启动流程。这里记录下过程。
2、环境介绍
vmware12 + centos6.5 + xshell
3、具体步骤
开始具体步骤前,确保已创建一台虚拟机,如图所示。接下来开始具体步骤。
(1)添加磁盘
为虚拟机添加磁盘用语存储裁剪后的系统文件及其配置文件。磁盘准备1.1G即可
(2)对新添的磁盘分区格式化并挂载
添加磁盘后,启动虚拟机。执行fdisk -l命令查看当前磁盘信息。其中/dev/sdb既是所添加的磁盘,但现在还没有分区。
通过执行指令fdisk /dev/sdb进入分区命令行,如图依次填写指令,实现对磁盘的分区操作。
按w保存分区信息后,再次执行fdisk -l命令查看分区信息。
对/dev/sdb选定文件系统并格式化
1
2
|
mkfs.ext4 /dev/sdb1 mkfs.ext4 /dev/sdb2 |
在/mnt/目录下,新建文件夹boot和sysroot后,cd到mnt目录下,执行挂载操作
1
2
|
mount /dev/sdb1 boot/ mount /dev/sdb2 sysroot/ |
(3)安装引导程序到设备/dev/sdb1中,指定其为系统启动盘
1
|
grub-install --root-directory=/mnt /dev/sdb1 |
(4)将内核及其依赖拷贝到指定目录中
1
2
|
cp /boot/vmlinuz-2.6.32-431.el6.x86_64 boot/vmlinuz cp /boot/initramfs-2.6.32-431.el6.x86_64.img boot/initramfs.img |
(5)编写grub.conf文件
在目录/mnt/boot/grub/下,新建grub.conf文件并填写如下内容
1
2
3
4
5
6
|
default =0 timeout=5 title tiny linux root (hd0,0) kernel /vmlinuz ro root=/dev/sda2 selinux=0 init=/bin/bash initrd /initramfs.img |
(6)配置裁剪系统所需的工具包
编写脚本,参考别人博客https://blog.csdn.net/kingolie/article/details/53428541,将文件保存为/root/script.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
#!/bin/bash # target=/mnt/sysroot clearCmd(){ if which $cmd &> /dev/ null ;then cmdPath=`which --skip-alias $cmd` else echo "No such command" return 5 fi } cmdCopy(){ cmdDir=`dirname $1` [ -d ${target}${cmdDir} ] || mkdir -p ${target}${cmdDir} [ -f ${target}${1} ] && echo -e "\033[31mThe ${1} exist!\033[0m" && return 5 [ -f ${target}${1} ] || cp $1 ${target}${cmdDir} echo -e "\033[32mCopy ${1} success.\033[0m" } libCopy(){ for lib in `ldd $1 | grep -o "/[^[:space:]]\{1,\}" `; do libDir=`dirname $lib` [ -d ${target}${libDir} ] || mkdir -p ${target}${libDir} [ -f ${target}${lib} ] && echo -e "\033[31mThe ${lib} exist!\033[0m" && continue [ -f ${target}${lib} ] || cp $lib ${target}${libDir} echo -e "\033[32mCopy ${lib} success.\033[0m" done } while true ; do read -p "Enter a command: " cmd if [ "$cmd" == "quit" ];then echo "quit" exit 0 fi clearCmd $cmd [ $? -eq 5 ]&& continue cmdCopy $cmdPath libCopy $cmdPath done |
运行脚本bash /root/script.sh,为裁剪后的系统添加指令极其依赖
1
2
3
4
5
6
7
8
9
10
11
12
|
bash ls cat insmod rmmod mount umount ifconfig ip ping route chkconfig |
4、到此步骤系统已经裁剪完成,需要测试一下。
通过vmware新建一个不带系统的虚拟机,并添加之前1.1G的磁盘,在Centos6.5目录下找到TinyLinux.vmdk文件即可
添加完成之后,将图上的8G磁盘移除,
点击启动后,即可看到如下的画面证明系统裁剪成功
5、配置Tiny Linux网络接口
将最小系统关机后,重新启动centos6.5并把1.1G磁盘重新挂载到指定目录中
1
2
|
mount /dev/sdb1 /mnt/boot/ mount /dev/sdb2 /mnt/sysroot/ |
(1)复制网卡模块驱动到Tiny Linux系统中
网卡驱动所在路径:
1
|
/lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/net/igb/igb.ko |
在Tiny Linux的sysroot目录下创建目录
1
2
3
|
mkdir /mnt/sysroot/lib/modules cp /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/net/igb/igb.ko /mnt/sysroot/lib/modules/ |
(2)为Tiny Linux配置/sbin/init启动网络服务和其他重要服务
1
|
vim /mnt/sysroot/sbin/init<br>chmod +x /mnt/sysroot/sbin/init |
init内容为
1
2
3
4
5
6
7
8
9
10
11
|
#!/bin/bash # echo -e "\tWelcome to \033[34mKingOlie Tiny \033[0mLinux" mount -n -t proc proc /proc mount -n -t sysfs sysfs /sys insmod /lib/modules/igb.ko [ $? -eq 0 ] && echo -e "Loaded igb module \033[60G[ \033[32mOK\033[0m ]" ifconfig lo 127.0.0.0/8 ifconfig eth0 192.168.24.131/24 mount -n -o remount,rw /dev/sda2 / /bin/bash |
(3)修改/mnt/boot/grub/grub.conf文件,将init由原来的bash修改为sbin下的init
1
2
3
4
5
6
|
default =0 timeout=5 title Tiny Linux root (hd0,0) kernel /vmlinuz ro root=/dev/sda2 quiet selinux=0 init=/sbin/init initrd /initramfs.img |
6、完成以上步骤即可启动Tiny Linux
(1)通过执行ping命令实现网络的接通,但只能访问同网段的网络,对于外网不能ping通。
(2)利用route配置网络路由,即可实现对外网的访问。
7、总结
本文主要对centos6.5系统进行裁剪,通过裁剪过程中涉及的步骤对linux启动的整个过程有所了解,但对于grub配置文件还是不够了解。
=========================================================================================================================================================================================================
1.前言
一直以来都想制作一个最小化的Linux系统,这个小系统需要有常用的Linux 命令,以及定制化的某些功能。可是由于种种原因一直没能实现,最近终于有时间把它做了出来。
本文所说的精简的Linux系统主要由内核,busybox,以及引导程序构成。
感谢网友[windy_ll](https://blog.csdn.net/qq_41374107)的文章,我是看着他的教程一步一步完成以下操作的。
2.安装配置内核所需要的依赖
我的环境是ubuntu20.04,初装的系统,软件源已配置为阿里的源。
在这里插入图片描述
为了保证后续软件的顺利安装先更新一下源。
apt update
1
在这里插入图片描述
2.1 安装依赖
由于需要配置内核,本文的所有操作都在root用户下进行
apt install -y make
apt install -y make-guile
apt install -y gcc
apt install -y flex
apt install -y bison
apt install -y libelf-dev
apt install -y openssl
apt install -y libncurses-dev
apt install -y libssl-dev
1
2
3
4
5
6
7
8
9
小插曲:就在刚刚我的ubuntu20.04 ctrl+shift + insert粘贴键不好用了,重启了一下系统又好了。读者诸君你们大可不必一个命令一个命令的去敲,使用快捷键粘贴就可以了。
2.2 下载内核
wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.13.8.tar.gz
1
在这里插入图片描述
此处下载的内核就是咱们将要制作的镜像系统的内核。
tar -zxvf linux-5.13.8.tar.gz
cd linux-5.13.8
1
2
在这里插入图片描述
2.3 配置内核
常见的配置有以下几种:
make defconfig - 默认配置
make allyesconfig - 创建能选yes就选yes的配置
make allnoconfig - 创建能选no就选no的配置
make menuconfig - 基于ncurser的图形化界面配置
这里采用命令make defconfig使用默认的即可,如下图所示:
make defconfig
1
在这里插入图片描述
2.4 编译内核
make bzImage
1
在这里插入图片描述
这个过程有点漫长,先去洗个脸😄
如果没有什么报错,出现下图说明编译成功了。
在这里插入图片描述
编译好的内核文件在arch文件夹相应的架构文件夹下面,如下图所示:
在这里插入图片描述
3.制作根文件系统
3.1 下载busybox
wget https://busybox.net/downloads/busybox-1.32.1.tar.bz2
1
3.2 配置busybox
编译busybox与编译内核步骤基本一致,将下载好的压缩包进行解压,然后进入文件夹中,使用make defconfig配置默认编译选项,这里需要注意的是,在生成的.config配置文件中,需要设置CONFIG_STATIC=y,如果没有,添加即可,如下图所示:
cd ~/Downloads
wget https://busybox.net/downloads/busybox-1.32.1.tar.bz2
tar -jxvf busybox-1.32.1.tar.bz2
cd busybox-1.32.1
make defconfig
vim .config
1
2
3
4
5
6
在这里插入图片描述
3.2 编译busybox
make busybox install
1
在这里插入图片描述
编译完成后,会在当前目录下新增一个_install文件夹,里面就是编译好的busybox。
在这里插入图片描述
3.3 制作根文件
删除_install目录下的linuxrc文件
cd _install/
rm -rf linuxrc
1
2
在这里插入图片描述
复制_install 文件夹下的除linuxrc以外的所有文件到rootfs文件夹下面。
cd ..
cd ..
mkdir rootfs
cd rootfs
cp -r ../busybox-1.32.1/_install/bin/ .
cp -r ../busybox-1.32.1/_install/sbin/ .
cp -r ../busybox-1.32.1/_install/usr/ .
mkdir dev proc sys
1
2
3
4
5
6
7
8
在这里插入图片描述
在当前目录(rootfs)下新增一个init文件
vim init
1
添加如下内容
#!/bin/sh
dmesg -n 1
mount -t devtmpfs none /dev
mount -t proc none /proc
mount -t sysfs none /sys
setsid cttyhack /bin/sh
1
2
3
4
5
6
7
在这里插入图片描述
然后将rootfs文件夹下的所用内容赋777权限。
cd ..
chmod 777 -R rootfs/
1
2
在这里插入图片描述
3.4 打包系统文件
利用命令find . | cpio -R root:root -H newc -o | gzip > ../rootfs.gz将文件系统打包
find . | cpio -R root:root -H newc -o | gzip > ../rootfs.gz
1
在这里插入图片描述
4. 创建BIOS引导
这里我们使用syslinux来创建bios引导的一个linux iso镜像,
4.1 先下载并解压syslinux
wget https://mirrors.edge.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.03.tar.gz
gunzip syslinux-6.03.tar.gz
tar -xvf syslinux-6.03.tar
1
2
3
在这里插入图片描述
4.2 准备制作镜像文件所需的文件
新建一个文件夹isobios,将解压后的syslinux文件夹下面的bios/core/isolinux.bin,bios/com32/elflink/ldlinux/ldlinux.c32复制到isobios文件夹下面。
mkdir isobios
cd isobios
cp ../rootfs.gz .
cp ../linux-5.13.8/arch/x86/boot/bzImage kernel.gz
cp ../syslinux-6.03/bios/core/isolinux.bin .
cp ../syslinux-6.03/bios/com32/elflink/ldlinux/ldlinux.c32 .
1
2
3
4
5
6
在这里插入图片描述
4.3 创建启动引导配置文件isolinux.cfg
vim isolinux.cfg
1
在这里插入图片描述
添加如下内容
default kernel.gz initrd=rootfs.gz
1
在这里插入图片描述
4.4 生成ISO镜像
在isobios文件夹下面使用命令xorriso -as mkisofs -o …/testbios.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table ./生成iso镜像文件,如下图所示:
需要用到xorriso,要先安装
apt install -y xorriso
xorriso -as mkisofs -o ../testbios.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table ./
1
2
在这里插入图片描述
好了,至此我们的精简的Linux镜像已经制作好了,接下来就要验证一下这个小系统能不能跑起来了。
5.验证
首先将我们前面制作的ISO文件复制出来。
然后使用vmware虚拟机新建一个虚拟机。
和平常我们安装新的虚拟机系统一样,这里我们制作的ISO镜像使用了5.13.8的内核,在虚拟机制作时选择其他Linux5.X或更高版本内核64位。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
好了,挂载我们制作的镜像文件,开启一下看看吧。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
好了,系统引导成功了。
在这里插入图片描述
探索一下这个小系统有什么吧?
在这里插入图片描述
简单试了一下,常用的ls,pwd,touch,ifconfig,chmod等还是有的。
如果一个linux系统没有网络功能也就失去了灵魂,接下来把我们的小系统的网络开启起来吧。
ifconfig eth0 192.168.2.110 netmask 255.255.255.0
route add default gw 192.168.2.1
1
2
在这里插入图片描述
ping一下宿主机。
在这里插入图片描述
宿主机对ping一下。
在这里插入图片描述
漂亮,双方对ping一切OK。
🇵🇸 至此我们的精简的linux镜像就制作完成了。可能还会有一些问题,比如我想添加多一点的命令,(关机,重启,vim),网络功能还有点弱,还想增加镜像的安装功能,那就等博主的后续文章吧。
特别感谢网友:「windy_ll」
原文地址:从零开始制作一个linux iso镜像
————————————————
版权声明:本文为CSDN博主「alfiy」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/alfiy/article/details/122568957
======================================================================================================================================================================================================
linux裁剪
- 1. 进到linux内核源代码目录下cd /home/linux-2.6.16
- 2. make clean
- 删除大多数的由编译生成的文件、但会保留内核的配置文件.config。
- make mrproper
- 删除所有的编译生成的文件,还有内核配置文件,再加上各种备份文件。
- make distclean
- mrproper删除的文件,加上编辑备份文件和一些补丁文件。
- 3. 配置内核make menuconfig
-
2.5 Linux内核配置选项
- 下面以最新的Linux 2.6.20内核为例,介绍比较常用的一些Linux内核配置选项,其他选项读者可以参考系统提供的帮助信息。
- 需要说明的是,在内核配置中,某项选择Y表示把该项选择进内核,选择M则表示把该项编译成模块,选择N则表示不选择进内核。在make menuconfig 下,*表示Y,M表示M,空白表示N。在make xconfig下,√表示Y,·表示M,空白表示N。如果某选项在配置菜单中是可选择的,这并不意味着目标系统就支持该功能,当然大部分供选择的选项是目标系统文持的;同样,配置菜单中没有的选项并不一定就表示目标系统不支持该功能,原因可能是该功能还未在目标系统上测试过,或者是维护人员未将该功能选项加入到各级系统配置文件的config.in中,具体可以查看内核的英文说明。
-
2.5.1 General setup
- General setup选项为常规安装选项,包括版本信息、虚拟内存、进程间通信、系统调用、审计支持等基本内核配置选项。下面介绍常规安装选项下主要子选项的配置方法。
- 1)Local version - append to kernel release
- 在内核后面加上自定义的版本字符串。这些字符在使用uname-a命令时会显示出来。要求字符最多不能超过64位。如果不清楚,则选择N。
- 2)Automatically append version information to the version string(LOCALVERSION_ AUTO)
- 自动生成版本信息。这个选项会自动探测内核并且生成相应的版本。在编译时需要有perl及git仓库的支持。在一般情况下,建议选择Y。
- 3)Support for paging of anonymous memory(swap)
- 使用交换分区或者交换文件来作为虚拟内存,也就是让计算机好像拥有比实际内存更多的内存空间用来执行很大的程序。Linux中的虚拟内存即SWAP分区,除非不需要SWAP分区,否则这里选择Y。
- 4)System V IPC(Inter Process Communication,IPC)
- System V进程间通信(IPC)支持,许多程序需要这个功能,因此选择Y。中间过程连接是一组功能和系统调用,使得进程能够同步和交换信息。可以用info ipc命令来了解IPC的具体用法。
- 其中,IPC Namespaces (IPC_NS)子选项表示IPC命名空间,命名空间的作用是区别同名的设备。这个选项也是为不同的服务器提供IPC的多命名,达到一个IPC提供多对象支持的目的。如果不清楚,则选择N。
- 5)POSIX Message Queues
- POSIX(可移植操作系统接口)消息队列是POSIX IPC中的一部分,在通信队列中有较高的优先权来保持通信畅通。如果需要编译和运行在Solaris操作系统上写的 POSIX信息队列程序,则选择Y。同时还需要 mqueue 库来支持这些特性。它是作为一个文件系统存在(mqueue),可以设置它。为保证以后的不同程序的协同稳定。如果不清楚,则选择N。
- 6)BSD Process Accounting
- 将进程的统计信息写入文件的用户级系统调用,信息通常包括建立时间、所有者、命令名称、内存使用、控制终端等。如果选择Y,则用户级别的程序就可以通过特殊的系统调用方式来通知内核把进程统计信息记录到一个文件中,当这个进程存在的时候,信息就会被内核记录进文件,这对用户级程序非常有用,所以通常选择Y。
- 其中,BSD Process Accounting version 3 file forma子选项表示使用新的第三版文件格式,通常选择Y。统计信息将会以新的格式(V3)写入,这格式包含进程ID和父进程。注意这个格式不兼容老版本(V0/V1/V2)的文件格式,所以需要升级相关工具来使用它。
- 7)Export task/process statistics through netlink(EXPERIMENTAL)
- 这是一个处于实验阶段的功能,表示通过netlink接口向用户空间导出任务、进程等统计信息,与BSD Process Accounting的不同之处在于这些数据在进程运行的时候就可以通过相关命令访问。如果不清楚,则选择N。
- 8)UTS Namespaces
- UTS(通用终端系统)命名空间支持。它允许容器,比如Vservers利用UTS命名空间来为不同的服务器提供不同的UTS。如果不清楚,则选择N。
- 9)Auditing support
- 审计支持,某些内核模块(例如SELinux)需要它,只有同时选择其子项才能对系统调用进行审计。允许审计的下层能够被其他内核子系统使用,比如SELinux,它需要这个来进行登录时的声音和视频输出。没有CONFIG_AUDITSYSCALL时(即下一个选项)无法进行系统调用。
- 其中,Enable system-call auditing support (AUDITSYSCALL)子选项表示支持对系统调用的审计,允许系统独立地或者通过其他内核的子系统,调用审计支持,比如SELinux。要使用这种审计的文件系统来查看特性,请确保 INOTIFY 已经被设置。这两个选项,要选择Y就都选择,以便调用其他内核。
- 10)Kernel.config support
- 把内核的配置信息编译进内核中,以后可以通过scripts/extract-ikconfig脚本来提取这些信息。
- 这个选项允许.config文件(即编译Linux时的配置文件)编译进内核中。可以通过内核镜像文件kernel image file,用命令script scripts/extract-ikconfig来提取这些配置信息,作为当前内核重编译或者另一个内核编译的参考。如果内核在运行中,可以通过/proc/config.gz文件来读取。
- 其中Enable access to .config through/proc/config.gz子选项表示可以通过/proc/config.gz 访问当前内核的.config。这两个选项,要选择Y就都选择,以便调用其他内核。
- 11)Cpuset support
- 多CPU支持。这个选项可以建立和管理CPU集群,它可以动态地将系统分割在各个CPU和内存节点中,在各个节点是独立运行的,这对大型的系统尤其有效。一般只有在含有大量CPU(大于16个)的SMP系统或NUMA(非一致内存访问)系统才需要它。如果不清楚,则选择N。
- 12)Kernel->user space relay support(formerly relayfs)
- 内核系统区和用户区进行传递通信的支持。在某些文件系统上(比如debugfs)提供从内核空间向用户空间传递大量数据的接口。
- 这个选项在特定的文件系统中提供数据传递接口支持,它可以提供从内核空间到用户空间的大批量的数据传递工具和设施。如果不清楚,则选择N。
- 13)Initramfs source file(s)
- initrd已经被initramfs取代,选N即可。
- 14)Optimize for size(Look out for broken compilers!)
- 这个选项将在GCC命令后用“-Os”代替“-O2”参数,编译时优化内核尺寸,以在编译时优化内核尺寸。
- 警告:某些GCC版本会产生错误的二进制代码。如果有错,请升级GCC。
- 这是优化内核大小的功能,一般没必要选。因为一个编译好的内核只有7~10MB,如果空间足够就不要冒出问题的风险来优化内核大小。
- 15)Configure standard kernel features(for small systems)
- 配置标准的内核特性(为小型系统)。这个选项可以让内核的基本选项和设置无效或者扭曲。这是用于特定环境中的,它允许“非标准”内核。它是为了编译某些特殊用途的内核使用的,例如引导盘系统。通常选这一选项,也不必关心其子选项。
-
2.5.2 Loadable module support
- Loadable module support即引导模块支持,该选项包括加载模块、卸载模块、模块校验、自动加载模块等引导模块配置相关子选项。本节主要介绍引导模块支持子选项的配置方法。
- 1)Enable loadable module support
- 打开可加载模块支持,如果打开它则必须通过make modules_install把内核模块安装在/lib/modules/中。模块是一小段代码,编译后可在系统内核运行时动态地加入内核,从而为内核增加一些特性或是对某种硬件进行支持。一般一些不常用到的驱动或特性可以编译为模块以减少内核的体积。在运行时可以使用modprobe命令来加载它到内核中去(在不需要时还可以移除它)。一些特性是否编译为模块的原则有不常使用的,或是在系统启动时不需要的驱动可以将其编译为模块,如果是一些在系统启动时就要用到的驱动,比如说文件系统,系统总线的支持就不要编为模块,否则无法启动系统。在启动时不用到的功能编成模块是最有效的方式。可以查看MAN手册来了解modprobe、lsmod、modinfo、insmod和rmmod。
- 如果选择了这项,则需要运行make modules_install命令来把模块添加到/lib/modules/目录下,以便 modprobe 可以找到它们。如果不清楚,则选择Y。
- 2)Module unloading
- 允许卸载已经加载的模块。如果选择N,将不能卸载任何模块(有些模块一旦加载就不能卸载,不管是否选择了这个选项)。如果不清楚,则选择Y。
- 其中,Forced module unloading子选项允许强制卸载正在使用中的模块,即使内核认为这不安全,内核也将会立即移除模块,而不管是否有人在使用它(用rmmod -f命令)。如果不清楚,则选择N。
- 3)Module versioning support(MODVERSIONS)
- 允许使用其他内核版本的模块。选这项会添加一些版本信息,来给编译的模块提供独立的特性,以使不同的内核在使用同一模块时区别于它原有的模块。如果不清楚,则选择N。
- 4)Source checksum for all modules
- 为所有的模块校验源码,如果不是自己编写内核模块就不需要它。这个功能是为了防止在编译模块时不小心更改了内核模块的源代码但忘记更改版本号而造成版本冲突。如果不清楚,则选择N。
- 5)Automatic kernel module loading
- 允许内核通过运行modprobe自动加载模块,比如可以自动解决模块的依赖关系。在一般情况下,如果我们的内核在某些任务中要使用一些被编译为模块的驱动或特性时,我们要先使用modprobe命令来加载它,内核才能使用。如果选择了这个选项,在内核需要一些模块时它可以自动调用modprobe命令来加载需要的模块。如果不清楚,则选择Y。
-
2.5.3 Processor type and features
- Processor type and features即处理器类型及特性,该模块包括处理器系列、内核抢占模式、抢占式大内核锁、内存模式、使用寄存器参数等处理器配置相关信息。本节介绍其中与嵌入式开发有关的主要子选项的配置方法。
- 1)Symmetric multi-processing support(SMP)
- 对称多处理器支持。将支持多个CPU的系统,此时Enhanced Real Time Clock Support选项必须开启,Advanced Power Management选项必须选择N。如果系统只有一个CPU,则选择N。反之,选择Y。如果选择N,内核将会在单个或者多个CPU的机器上运行,但是只会使用一个CPU。如果选择Y,内核可以在很多(但不是所有)单CPU的机器上运行,在这样的机器上选择N,会使内核运行得更快。如果不清楚,则选择N。
- 2)Processor family
- 处理器系列。针对嵌入式系统所使用的处理器类型,选取相应的选项。
- 3)Preemptible kernel
- 内核抢占模式。一些优先级很高的程序可以先让一些低优先级的程序执行,即使这些程序是在内核态下执行。从而减少内核潜伏期,提高系统的响应。当然在一些特殊的点的内核是不可抢占的,比如内核中的调度程序自身在执行时就是不可被抢占的。这个特性可以提高桌面系统、实时系统的性能。有下面3个选项。
- n No Forced Preemption(Server):非强迫式抢占。这是传统的Linux抢占式模型,针对于高吞吐量设计。它同样在很多时候会提供很好的响应,但是也可能会有较长的延迟。如果是要建立服务器或者用于科学运算,或者要最大化内核的运算能力而不理会调度上的延迟,则选这项。
- n Voluntary Kernel Preemption(Desktop):自动式内核抢占。这个选项通过向内核添加更多的“清晰抢占点”来减少内核延迟。这些新的抢占点以降低吞吐量为代价,来降低内核的最大延迟,提供更快的应用程序响应。这通过允许低优先级的进程自动抢占来响应事件,即使进程在内核中进行系统调用。这使得应用程序运行得更“流畅”,即使系统已经是高负荷运转。嵌入式系统里面通常选择N。
- n Preemptible Kernel(Low-Latency Desktop):可抢占式内核(低延迟桌面)。这个选项通过使所有内核代码(非致命部分)编译为“可抢占”来降低内核延迟。通过允许低优先级进程进行强制抢占来响应事件,即使这些进程正在进行系统调用或者未达到正常的“抢占点”。这使得应用程序运行得更加“流畅”,即使系统已经是高负荷运转。代价是吞吐量降低,内核运行开销增大。嵌入式系统编译内核通常选择Y,这样只有很少的延迟。
- 其中,Preemptible Kernel子选项提供了最快的响应,适合对实时性要求较高的嵌入式系统。
- 4)Preempt The Big Kernel Lock
- 抢占式大内核锁。应用于实时要求高的场合,适合嵌入式系统。这个选项通过让大内核锁变成“可抢占”来降低延迟。构建实时性要求较高的嵌入式系统,通常选择N。
- 5)Machine Check Exception
- 机器例外检查。让CPU检测到系统故障时通知内核,以便内核采取相应的措施(如过热关机等)。内核根据问题的严重程度来决定下一步的行为,比如在命令行上打印警告信息或者关机。处理器必须是 Pentium或者更新版本才能支持这个功能。用cat /proc/cpuinfo来检测 CPU是否有mce 标志。
- 所以使用ARM处理器的嵌入式系统在这里选择N。
- 6)Memory model
- 内存模式。一般选Flat Memory(平坦内存模式),Sparse Memory(稀疏内存模式)选项涉及内存热插拔。
- 7)Use register arguments(REGPARM)
- 使用寄存器参数。使用-mregparm=3参数编译内核,将前3个参数以寄存器方式进行参数调用,这使 GCC使用更高效的应用程序二进制接口(ABI)来跳过编译时的前3个调用寄存器参数,可以生成更紧凑和高效的代码。如果选择N,这个选项默认的ABI将会使用。如果不清楚,则选择Y。
- 8)kexec system call(KEXEC)
- kexec系统调用。使用此选项可以不必重启而切换到另一个内核。
- kexec是一个用来选择N当前内核,然后开启另一个内核的系统调用。它和重启很像,但是它不访问系统固件。由于和重启很像,可以启动任何内核,不仅仅是Linux。kexec这个名字是从exec系统调用来的,它只是一个进程,可以确定硬件是否正确,所以这段代码可能不会正确地进行初始化工作。为慎重起见,在一般情况下,建议选择N。
-
2.5.4 Networking support
- Networking support即网络支持,该选项配置的是网络协议,内容庞杂,这里就不一一介绍了。只要对网络协议有所了解,应该可以看懂相关帮助文件。如果要开发嵌入式系统能像PC一样使用各类网络协议,则可以使用默认选项,其中,最常用的TCP/IP networking选项当然要选择。
-
2.5.5 Device Drivers
- Device Drivers即设备驱动,该选项包括内核所支持的各类硬件设备的配置信息。对于嵌入式系统来说,设备驱动配置选项是最重要的步骤之一,下面详细介绍它们。
- 1)Generic Driver Options
- 驱动程序通用选项。包括以下几个子选项。
- n Select only drivers that don't need compile-time external firmware:只显示不需要内核对外部设备的固件做map支持的驱动程序,除非有某些怪异硬件,否则要选择Y。
- n Prevent firmware from being built:不编译固件。固件一般是随硬件的驱动程序提供的,仅在更新固件的时候才需要重新编译。建议选择Y。
- n Userspace firmware loading support:提供某些内核之外的模块需要的用户空间固件加载支持,在内核树之外编译的模块可能需要它。如果不清楚,则选择N。
- n Driver Core verbose debug messages:让驱动程序内核在系统日志中产生冗长的调试信息,仅供调试使用。如果不清楚,则选择N。
- 2)Connector - unified userspace <-> kernelspace linker
- 统一的用户空间和内核空间连接器,工作在netlink socket协议的顶层。如果不确定,则选择N。
- 其中,Report process events to userspace子选项表示向用户空间报告进程事件。
- 3)Memory Technology Devices(MTD)
- 特殊的存储技术装置,如常用于数码相机或嵌入式系统的闪存卡。如果不清楚,则选择N。
- 4)Parallel port support
- 并口支持(传统的打印机接口)。如果不清楚,则选择N。
- 5)Plug and Play support
- 支持即插即用,若未选,则应当在BIOS中的“PnP OS”选择N。这里的选项与PCI设备无关。包括以下几个子选项。
- n PnP Debug Messages:该选项仅供调试使用。
- n ISA Plug and Play support:ISA设备支持即插即用。如果不清楚,则选择N。
- n Plug and Play BIOS support:Linux使用Plug and Play BIOS规范v1.0A(1994年)中定义的PnPBIOS自动检测主板上的资源和设备,但是其中的某些特性目前尚未实现,比如,事件通知/扩展坞(Docking Station)信息/ISAPnP服务。如果希望由内核检测主板上的设备并为其分配资源(此时BIOS中的“PnP OS”必须开启)可以选择Y。此外,PnPBIOS还有助于防止主板上的设备与其他总线设备冲突。不过需要注意的是ACPI将会逐渐取代 PnPBIOS(虽然目前两者可以共存),所以如果系统不使用ISA设备并且支持ACPI,建议不要选择Y。将BIOS中的“PnP OS”选择N。
- n Plug and Play BIOS/proc interface:该选项仅供调试使用。如果不清楚,则选择N。
- n Plug and Play ACPI support:让Linux使用PnPACPI自动检测主板上内建的设备并为其分配资源(即使这些设备已被BIOS禁用),它有助于避免设备之间的资源(如中断)冲突。如果不清楚,则选择N。
- 6)Block devices
- 块设备。包括以下几个子选项。
- n normal floppy disk support:通用软驱支持。如果嵌入式系统采用这种设备,则选择Y。
- n XT hard disk support:一种老式产品。如果嵌入式系统采用这种设备,则选择Y。
- n Parallel port IDE device support:通过并口与计算机连接的IDE设备。如果嵌入式系统采用这种设备,则选择Y。
- n Compaq SMART2 support:基于Compaq SMART2控制器的磁盘阵列卡。如果嵌入式系统采用这种设备,则选择Y。
- n Compaq Smart Array 5xxx support:基于Compaq SMART控制器的磁盘阵列卡。如果嵌入式系统采用这种设备,则选择Y。
- n Mylex DAC960/DAC1100 PCI RAID Controller support:一种老式产品。如果嵌入式系统采用这种设备,则选择Y。
- n Micro Memory MM5415 Battery Backed RAM support:一种使用电池做后备电源的内存。如果嵌入式系统采用这种设备,则选择Y。
- n Loopback device support:Loopback是指拿文件来模拟块设备,比如可以将一个iso9660镜像文件挂成一个文件系统。如果嵌入式系统采用这种设备,则选择Y。
- n Cryptoloop Support:使用系统提供的加密API对Loopback设备加密,但不能用于日志型文件系统。如果嵌入式系统采用这种设备,则选择Y。
- n Network block device support:让系统成为网络块设备的客户端。如果不清楚,则选择N。
- n Promise SATA SX8 support:基于Promise公司的SATA SX8控制器的RAID卡。如果嵌入式系统采用这种设备,则选择Y。
- n Low Performance USB Block driver:该选项并非表示支持U盘。一般情况下,建议选择N。
- n RAM disk support:内存中的虚拟磁盘,大小固定(由下面的选项决定,也可给内核传递ramdisk_size=参数来决定),它的功能和代码都比shmem简单许多。如果嵌入式系统采用RAM disk,则选择Y。
- n Default number of RAM disks:默认RAM disk的数量。一般不必修改。
- n Default RAM disk size(kbytes):默认RAM disk容量。一般不必修改。
- n Default RAM disk block size(bytes):每一个RAM disk的默认块大小,设为PAGE_SIZE的值时效率最高。
- n Initial RAM filesystem and RAM disk(initramfs/initrd)support:如果启动系统所必须的模块都在内核里,则选择Y。
- n Packet writing on CD/DVD media:CD/DVD刻录支持。如果嵌入式系统采用这种设备,则选择Y。
- n Free buffers for data gathering:用于收集写入数据的缓冲区个数(每个占用64KB内存),在内存运行的情况下,缓冲区越多性能越好。
- n Enable write caching:为CD-R/W设备启用写入缓冲。由于安全性问题,在一般情况下,建议选择Y。
- n ATA over Ethernet support:以太网ATA设备支持。如果嵌入式系统采用这种设备,则选择Y。
- 7)Misc devices
- 杂项设备。如果不清楚,则选择N。
- 8)ATA/ATAPI/MFM/RLL support
- SCSI设备通常是IDE硬盘和ATAPI光驱。纯SCSI系统且不使用这些接口可以选择N。
- 9)SCSI device support
- SCSI设备。如果不清楚,则选择N。
- 10)Serial ATA and Parallel ATA drivers
- SATA与PATA设备。如果不清楚,则选择N。
- 11)Old CD-ROM drivers(not SCSI,not IDE)
- 老旧的CD-ROM驱动,这种CD-ROM既不使用SCSI接口,也不使用IDE接口。如果不清楚,则选择N。
- 12)Multi-device support(RAID and LVM)
- 多设备支持(RAID和LVM)。RAID和LVM的功能是使多个物理设备组建成一个单独的逻辑磁盘。如果不清楚,则选择N。
- 13)Fusion MPT device support
- Fusion MPT设备支持。如果不清楚,则选择N。
- 14)IEEE 1394(FireWire)support
- IEEE 1394(火线)。如果不清楚,则选择N。
- 15)I2O device support
- I2O(智能I/O)设备使用专门的I/O处理器负责中断处理、缓冲存取、数据传输等烦琐任务以减少CPU占用,一般PC的主板上没有。如果不清楚,则选择N。
- 16)Network device support
- 网络设备。包含以下子选项。
- n Network device support:网络设备支持,如果要开发的嵌入式系统需要上网,则选择Y。
- n Intermediate Functional Block support:这是一个中间层驱动,可以用来灵活的配置资源共享。如果不清楚,则选择N。
- n Dummy net driver support:哑接口网络,使用SLIP或PPP传输协议(如ADSL用户)的需要它。如果不清楚,则选择N。
- n Bonding driver support:将多个以太网通道绑定为一个,也就是两块网卡具有相同的IP地址并且聚合成一个逻辑链路工作,可以用来实现负载均衡或硬件冗余。如果不清楚,则选择N。
- n EQL(serial line load balancing)support:串行线路的负载均衡。如果有两个MODEM和两条电话线而且用SLIP或PPP协议,该选项可以让你同时使用这两个 MODEM以达到双倍速度(在网络的另一端也要有同样的设备)。如果不清楚,则选择N。
- n Universal TUN/TAP device driver support:TUN/TAP可以为用户空间提供包的接收和发送服务,比如可以用来虚拟一张网卡或点对点通道。如果不清楚,则选择N。
- n General Instruments Surfboard 1000:Surfboard 1000插卡式Cable Medem(ISA接口),一种老式产品。如果不清楚,则选择N。
- n ARCnet devices:一般人没有ARCnet类型的网卡。如果不清楚,则选择N。
- n PHY device support:数据链路层芯片简称为MAC控制器,物理层芯片简称为PHY,通常的网卡把MAC和PHY的功能做到了一颗芯片中,但也有一些仅含PHY的“软网卡”。如果不清楚,则选择N。
- n Ethernet(10/100Mbit):目前最广泛的10/100MB网卡。如果不清楚,则选择N。
- n Ethernet(1000 Mbit):目前已成装机主流的1000MB网卡。如果不清楚,则选择N。
- n Ethernet(10000 Mbit):高速(万兆)网卡。如果不清楚,则选择N。
- n Token Ring devices:令牌环网设备。如果不清楚,则选择N。
- n Wireless LAN(non-hamradio):无线LAN。如果不清楚,则选择N。
- n PCMCIA network device support:PCMCIA或CardBus网卡。如果不清楚,则选择N。
- n WAN interfaces:WAN接口。如果不清楚,则选择N。
- n ATM drivers:异步传输模式。如果不清楚,则选择N。
- n FDDI driver support:光纤分布式数据接口。如果不清楚,则选择N。
- n HIPPI driver support:HIPPI(高性能并行接口)是一个在短距离内高速传送大量数据的点对点协议。如果不清楚,则选择N。
- n PLIP(parallel port)support:将并口映射成网络设备,这样两台机器即使没有网卡也可以使用并口通过并行线传输IP数据包。如果不清楚,则选择N。
- n PPP(point-to-point protocol)support:点对点协议,PPP已经基本取代SLIP了,若使用ADSL则要选择Y。如果不清楚,则选择N。
- n PPP multilink support:多重链路协议(RFC1990)允许将多个线路(物理的或逻辑的)组合为一个PPP连接以充分利用带宽,这不但需要pppd的支持,还需要ISP的支持。如果不清楚,则选择N。
- n PPP filtering:允许对通过PPP接口的包进行过滤。如果不清楚,则选择N。
- n PPP support for async serial ports:通过标准异步串口(COM1,COM2)使用PPP,比如使用老式的外置MODEM(非同步MODEM或ISDN MODEM)上网。如果不清楚,则选择N。
- n PPP support for sync tty ports:通过同步tty设备(比如SyncLink适配器)使用PPP,常用于高速租用线路(比如T1/E1)。如果不清楚,则选择N。
- n PPP Deflate compression:为PPP提供Deflate(等价于gzip压缩算法)压缩算法支持,需要通信双方的支持才有效。如果不清楚,则选择N。
- n PPP BSD-Compress compression:为PPP提供BSD(等价于LZW压缩算法,没有gzip高效)压缩算法支持,需要通信双方的支持才有效。如果不清楚,则选择N。
- n PPP MPPE compression(encryption):为PPP提供MPPE加密协议支持,它被用于微软的P2P隧道协议中。如果不清楚,则选择N。
- n PPP over Ethernet:这就是ADSL用户最常见的PPPoE,也就是在以太网上运行的PPP协议。如果不清楚,则选择N。
- n PPP over ATM:在ATM上运行的PPP。如果不清楚,则选择N。
- n SLIP(serial line)support:一个在串行线上(例如电话线)传输IP数据报的TCP/IP协议。小猫一族的通信协议,与宽带用户无关。如果不清楚,则选择N。
- n CSLIP compressed headers:CSLIP协议比SLIP快,它将TCP/IP头(而非数据)进行压缩传送,需要通信双方的支持才有效。如果不清楚,则选择N。
- n Keepalive and linefill:让SLIP驱动支持RELCOM linefill和keepalive监视,这在信号质量比较差的模拟线路上是个好主意。如果不清楚,则选择N。
- n Six bit SLIP encapsulation:这种线路非常罕见,在一般情况下,建议选择N。
- n Fibre Channel driver support:光纤通道。如果不清楚,则选择N。
- n Traffic Shaper:流量整形,已废弃。在一般情况下,建议选择N。
- n Network console logging support:通过网络记录内核信息。如果不清楚,则选择N。
- n Netpoll support for trapping incoming packets:在一般情况下,建议选择N。
- n Netpoll traffic trapping:在一般情况下,建议选择N。
- 17)ISDN subsystem
- 综合业务数字网(Integrated Service Digital Network)。如果不清楚,则选择N。
- 18)Telephony Support
- VoIP支持。如果不清楚,则选择N。
- 19)Input device support
- 输入设备。包括以下子选项。
- n Generic input layer(needed for keyboard,mouse):通用输入层,如果是使用键盘鼠标的,则选择Y。如果不清楚,则选择N。
- n Support for memoryless force-feedback devices:游戏玩家使用的力反馈设备。如果不清楚,则选择N。
- n Mouse interface:鼠标接口。如果不清楚,则选择N。
- n Provide legacy/dev/psaux device:仍然支持作为传统的/dev/psaux设备。如果不清楚,则选择N。
- n Horizontal screen resolution:数字化转换器或图形输入板的水平分辨率。如果不清楚,则选择N。
- n Vertical screen resolution:数字化转换器或图形输入板的垂直分辨率。如果不清楚,则选择N。
- n Joystick interface:游戏杆。如果不使用,则选择N。
- n Touchscreen interface:触摸屏。如果不使用,则选择N。
- n Event interface:能够利用/dev/input/eventX来存取输入设备的事件。如果不清楚,则选择N。
- n Event debugging:该选项仅供调试使用。如果不清楚,则选择N。
- n Keyboards:键盘驱动,一般选个AT键盘即可。如果不清楚,则选择N。
- n Mouse:鼠标驱动,一般选个PS/2鼠标即可。如果不清楚,则选择N。
- n Joysticks:游戏杆驱动。如果不使用,则选择N。
- n Touchscreens:触摸屏驱动。如果不使用,则选择N。
- n Miscellaneous devices:其他杂项驱动,一般选个PC喇叭即可。如果不清楚,则选择N。
- n Hardware I/O ports:硬件I/O端口。如果不清楚,则选择N。
- n Serial I/O support:使用PS/2键盘或鼠标,则选择Y。如果不使用,则选择N。
- n i8042 PC Keyboard controller:PS/2接口的键盘和鼠标。如果不使用,则选择N。
- n Serial port line discipline:串口键盘或鼠标。如果不使用,则选择N。
- n ct82c710 Aux port controller:一种德州仪器TravelMate笔记本上使用QuickPort接口的鼠标。如果不使用,则选择N。
- n Parallel port keyboard adapter:并口键盘或鼠标。如果不使用,则选择N。
- n PCI PS/2 keyboard and PS/2 mouse controller:接在移动式扩展坞(Docking station)上的键盘或鼠标。如果不使用,则选择N。
- n PS/2 driver library:为PS/2接口上的设备提供驱动(比如PS/2鼠标或标准AT键盘)。如果不使用,则选择N。
- n Raw access to serio ports:在一般情况下,建议选择N。
- n Gameport support:类似早年“小霸王”游戏机上的那种手柄。如果不使用,则选择N。
- 20)Character devices
- 字符设备。包含以下子选项。
- n Virtual terminal:虚拟终端。嵌入式系统在一般情况下,建议选择N。
- n Support for console on virtual terminal:内核将一个虚拟终端用做系统控制台(将诸如模块错误、内核错误、启动信息之类的警告信息发送到这里,通常是第一个虚拟终端)。嵌入式系统在一般情况下,建议选择N。
- n Support for binding and unbinding console drivers:虚拟终端是通过控制台驱动程序与物理终端相结合的,但在某些系统上可以使用多个控制台驱动程序(如framebuffer控制台驱动程序),该选项使得可以选择其中之一。如果不清楚,则选择N。
- n Non-standard serial port support:非标准串口支持。这样的设备已废弃不用。在一般情况下,建议选择N。
- n Serial drivers:串口驱动。如果有老式的串口鼠标或小猫,则选择Y。否则选择N。
- n Unix98 PTY support:伪终端(PTY)可以模拟一个终端,它由slave(等价于一个物理终端)和master(被一个诸如xterms之类的进程用来读写 slave设备)两部分组成的软设备。如果使用telnet或ssh远程登录者,则选择Y。如果不清楚,则选择N。
- n Legacy(BSD)PTY support:使用过时的BSD风格的/dev/ptyxx作为master,/dev/ttyxx作为slave。这个方案有一些安全问题,建议选择N。
- n Parallel printer support:并口打印机。如果不使用,则选择N。
- n Support for console on line printer:允许将内核信息输出到并口,这样就可以打印出来。如果不清楚,则选择N。
- n Support for user-space parallel port device drivers:/dev/parport设备支持,比如deviceid之类的程序需要使用它。在一般情况下,建议选择N。
- n Texas Instruments parallel link cable support:德州仪器生产的一种使用并行电缆的图形计算器。如果不清楚,则选择N。
- n IPMI:可以利用IPMI远程监视服务器的物理特征(温度、电压、风扇、电源、机箱入侵),它是独立于CPU、BIOS、OS的,只要接通电源就可以实现对服务器的监控。如果不清楚,则选择N。
- n IPMI top-level message handler:IPMI消息处理器,要启用IPMI远程监视,则选择Y。如果不清楚,则选择N。
- n Generate a panic event to all BMCs on a panic:当发生紧急情况(panic)时,IPMI消息处理器将会向每一个已注册的底板管理控制器(BMC)接口生成一个描述该panic的IPMI 事件,这些事件可以引发日志记录、报警、重启、关机等动作。如果不清楚,则选择N。
- n Generate OEM events containing the panic string:当发生紧急情况(panic)时,IPMI消息处理器将会产生OEM类型的事件。如果不清楚,则选择N。
- n Device interface for IPMI:为IPMI消息处理器提供一个IOCTL接口,以便用户空间的进程也可以使用IPMI。如果不清楚,则选择N。
- n IPMI System Interface handler:向系统提供接口(KCS、SMIC),一般用了IPMI就需要选择Y。如果不清楚,则选择N。
- n IPMI WatchDog Timer:启用IPMI WatchDog定时器。如果不清楚,则选择N。
- n IPMI Poweroff:允许IPMI消息处理器选择N。如果不清楚,则选择N。
- n WatchDog Cards:能让系统在出现致命故障后自动重启,如果没有硬件WatchDog,建议使用Hangcheck timer而不是软件WatchDog。如果不清楚,则选择N。
- n Watchdog Timer Support:选择Y。下面的一个Driver之后,再创建一个/dev/ watchDog节点即可拥有一只WatchDog了。更多信息请参考内核帮助。如果不清楚,则选择N。
- n Disable watchDog shutdown on close:一旦WatchDog启动后就禁止将其停止。如果不清楚,则选择N。
- n Software watchDog:软件WatchDog,使用它不需要有任何硬件的支持,但是可靠性没有硬件WatchDog高。如果不清楚,则选择N。
- n Hardware Random Number Generator Core support:硬件随机数发生器内核支持。如果不清楚,则选择N。
- n Intel HW Random Number Generator support:Intel芯片组的硬件随机数发生器。如果不清楚,则选择N。
- n AMD HW Random Number Generator support:AMD芯片组的硬件随机数发生器。如果不清楚,则选择N。
- n AMD Geode HW Random Number Generator support:AMD Geode LX的硬件随机数发生器。如果不清楚,则选择N。
- n VIA HW Random Number Generator support:VIA芯片组的硬件随机数发生器。如果不清楚,则选择N。
- n /dev/nvram support:直接存取主板上CMOS的接口。可能发生安全性问题,建议选择N。
- n Enhanced Real Time Clock Support:启用该选项并创建/dev/RTC文件后就可以通过/proc/driver/RTC访问系统的硬件时钟(RTC),众多功能依赖于它(如SMP、IRQ共享、定时器)。在一般情况下,建议选择Y。
- n Double Talk PC internal speech card support:由RC Systems公司制造的一种语音合成器。如果不清楚,则选择N。
- n Siemens R3964 line discipline:与使用西门子R3964协议的设备同步通信。除非有一些诸如PLC之类的特殊设备,否则在一般情况下,建议选择N。
- n Applicom intelligent fieldbus card support:Applicom international公司生产的用于现场总线连接卡。如果不清楚,则选择N。
- n Sony Vaio Programmable I/O Control Device support:Sony VAIO笔记本上的设备。如果不清楚,则选择N。
- n Ftape,the floppy tape device driver:针对使用磁带的系统。如果不清楚,则选择N。
- n /dev/agpgart(AGP Support):AGP总线支持,有AGP显卡的还必须从子项中选取符合嵌入式系统所使用显卡型号的驱动。如果不清楚,则选择N。
- n Direct Rendering Manager:DRI允许应用程序以高效安全的方式直接访问图形处理,主要用于硬件3D加速。建议桌面用户选择此方式,同时还必须从子项中选取符合嵌入式系统所使用显卡型号的驱动。如果不清楚,则选择N。
- n PCMCIA character devices:使用PCMCIA接口的字符设备。如果不清楚,则选择N。
- n ACP Modem(Mwave)support:IBM Thinkpad上的一种软猫,一种老式产品。如果不清楚,则选择N。
- n NatSemi SCx200 GPIO Support:松下的一种通用输入、输出(GPIO)芯片。嵌入式系统一般选择Y。
- n NatSemi PC8736x GPIO Support:松下的一种通用输入、输出(GPIO)芯片。嵌入式系统一般选择Y。
- n NatSemi Base GPIO Support:松下的一种通用输入、输出(GPIO)芯片。嵌入式系统一般选择Y。
- n AMD CS5535/CS5536 GPIO:常用于AMD Geode的一种通用输入、输出(GPIO)芯片。嵌入式系统一般选择Y。
- n RAW driver(/dev/raw/rawN):一种老式设备,已废弃。在一般情况下,建议选择N。
- n HPET-High Precision Event Timer:高精度事件定时器。如果不清楚,则选择N。
- n Allow mmap of HPET:允许对HPET寄存器进行映射。在一般情况下,建议选择Y。
- n Hangcheck timer:宕机检测定时器周期性地检查系统任务调度程序,以确定系统的运行状况,如果超过阈值,计算机将重新启动。它通常可以比WatchDog更好地解决可用性和可靠性问题。如果不清楚,则选择N。
- n TPM devices:基于硬件的“可信赖平台模块”。在一般情况下,建议选择N。
- n Telecom clock driver for MPBL0010 ATCA SBC:在一般情况下,建议选择N。
- 21)I2C support
- I2C是Philips极力推动的微控制应用中使用的低速串行总线协议,可用于监控电压、风扇转速、温度等。SMBus(系统管理总线)是I2C的子集。除硬件传感器外,Video For Linux也需要该模块的支持。包含以下子选项。
- n I2C device interface:I2C设备接口,允许用户空间的程序通过/dev/i2c-*设备文件使用I2C总线。如果不清楚,则选择N。
- n I2C Algorithms:I2C算法支持,可以全选择N。若有其他部分依赖其子项时,建议选择Y。
- n I2C Hardware Bus support:按实际硬件情况选对应的子项即可。
- n Miscellaneous I2C Chip support:其他不常见的产品,按需求选择。如果不清楚,则选择N。
- n I2C Core debugging messages:仅供调试使用。如果不清楚,则选择N。
- n I2C Algorithm debugging messages:仅供调试使用。如果不清楚,则选择N。
- n I2C Bus debugging messages:仅供调试使用。如果不清楚,则选择N。
- n I2C Chip debugging messages:仅供调试使用。如果不清楚,则选择N。
- 22)SPI support
- 串行外围接口(SPI)常用于微控制器(MCU)与外围设备(传感器、EEprom、Flash、编码器、模数转换器)之间的通信,比如MMC和SD卡就通常需要使用SPI。
- 23)Dallas's 1-wire bus
- 一线总线。如果不清楚,则选择N。
- 24)Hardware Monitoring support
- 当前主板大多都有一个监控硬件健康的设备用于监视温度、电压、风扇转速等,请按照嵌入式系统所使用主板实际使用的芯片选择相应的子项。另外,该功能还需要I2C的支持。如果不清楚,则选择N。
- 25)Multimedia devices
- 多媒体设备。包括以下子选项。
- n Video For Linux:如果是使用音频/视频设备或FM收音卡的则选择Y。此功能还需要I2C的支持。如果不清楚,则选择N。
- n Enable Video For Linux API 1:使用老旧的V4L第一版API。在一般情况下,建议选择N。
- n Enable Video For Linux API 1 compatible Layer:提供对第一版V4L的兼容。在一般情况下,建议选择N。
- n Video Capture Adapters:视频捕获卡。如果不清楚,则选择N。
- n Enable advanced debug functionality:该选项仅供调试使用。如果不清楚,则选择N。
- n Autoselect pertinent encoders/decoders and other helper chips:为视频卡自动选择所需的编码和解码模块。在一般情况下,建议选择Y。
- n Virtual Video Driver:虚拟视频卡,仅供测试视频程序和调试。如果不清楚,则选择N。
- n SAA5246A,SAA5281 Teletext processor:该选项仅面向欧洲用户,中国用户一般选择N。
- n SAA5249 Teletext processor:该选项仅面向欧洲用户,中国用户一般选择N。
- n V4L USB devices:使用USB接口的视频卡,子选项请根据嵌入式系统实际使用的视频卡选择。
- n Radio Adapters:音频卡,子选项请根据嵌入式系统实际使用的音频卡选择。
- n Digital Video Broadcasting Devices:数字视频广播设备(DVB卡或机顶盒),子选项请根据嵌入式系统实际使用的硬件选择
- n DABUSB driver:USB接口的数字音频广播设备接收器。如果不清楚,则选择N。
- 26)Graphics support
- 图形设备/显卡支持。包括以下子选项。
- n Enable firmware EDID:允许访问Video BIOS中的扩展显示器识别数据(EDID)。如果不清楚,则选择N。
- n Support for frame buffer devices:帧缓冲设备是为了让应用程序使用统一的接口操作显示设备而对硬件进行的抽象。如果不清楚,则选择N。
- n Enable Video Mode Handling Helpers:使用GTF和EDID来帮助处理显示模式,可以选择N。若有其他选项依赖于它时,则会自动选择Y。
- n Enable Tile Blitting Support:可以选择N。若有其他选项依赖于它时,会自动选择Y。
- n VGA 16-color graphics support:16色VGA显卡。如果有这样一种老式设备,则选择Y。
- n VESA VGA graphics support:符合VESA 2.0标准的显卡的通用驱动,如果显卡芯片在下面能够找到就可以选择N。
- n Virtual Frame Buffer support:仅供调试使用。
- n Console display driver support:控制台显示驱动。如果不清楚,则选择N。
- n VGA text console:文本控制台。如果不清楚,则选择N。
- n Enable Scrollback Buffer in System RAM:在内存中开辟额外的屏幕缓冲区,这将允许回滚屏幕。如果不清楚,则选择N。
- n Scrollback Buffer Size(in KB):在内存中开辟的额外屏幕缓冲区大小。如果不清楚,则选择N。
- n Video mode selection support:允许在内核启动时使用vga=选择文本模式,如果希望一行能够显示更多字符的话可以打开它。如果不清楚,则选择N。
- n MDA text console(dual-headed):如果有老式的单色显卡并且作为第二块显卡使用以实现双头显示,则选择Y。如果不清楚,则选择N。
- n Framebuffer Console support:基于Framebuffer的控制台驱动,服务器可以选择N。
- n Framebuffer Console Rotation:显示画面旋转,它可能大大降低显示速度,建议选择N。
- n Select compiled-in fonts:选择内建字体。如果不清楚,则选择N。
- n VGA 8x8 font:高分辨率下的小字体。如果不清楚,则选择N。
- n VGA 8x16 font:低分辨率下的大字体。如果不清楚,则选择N。
- n Logo configuration:启动时显示Linux的logo(一幅企鹅图像),喜欢炫一下的则选择Y。
- n Backlight&LCD device support:LCD显示器支持。如果不清楚,则选择N。
- 27)Sound
- 声卡。包括以下子选项。
- n Advanced Linux Sound Architecture:使用声卡者选择Y。
- n Sequencer support:音序器支持(MIDI必需),除非确定不需要,否则请选择Y。
- n Sequencer dummy client:除非要同时连接到多个MIDI设备或应用程序,否则一般选择N。
- n OSS Mixer API:OSS混音器API仿真,许多程序目前仍然需要使用它。在一般情况下,建议选择Y。
- n OSS PCM(digital audio)API:OSS数字录音(PCM)API模拟,许多程序目前仍然需要使用它。在一般情况下,建议选择Y。
- n OSS PCM(digital audio)API-Include plugin system:在一般情况下,建议选择N。
- n OSS Sequencer API:OSS音序器支持,许多程序目前仍然需要使用它。在一般情况下,建议选择Y。
- n RTC Timer support:为ALSA启用RTC定时器支持。在一般情况下,建议选择Y。
- n Use RTC as default sequencer timer:将RTC当做默认的时序脉冲发生器。如果不清楚,则选择N。
- n Dynamic device file minor numbers:仅供拥有多个声卡的用户选择。如果不清楚,则选择N。
- n Support old ALSA API:支持已被废弃的老版本ALSA API。如果不清楚,则选择N。
- n Verbose procfs contents:仅供调试使用。
- n Verbose printk:仅供调试使用。
- n Debug:仅供调试使用。
- n Generic devices:通用设备。如果不清楚,则选择N。
- n Dummy(/dev/null)soundcard:仅供调试使用。
- n Virtual MIDI soundcard:虚拟MIDI驱动,允许将使用原始MIDI设备的应用程序连接到音序器客户端。如果不清楚,则选择N。
- n PCI devices:PCI接口的声卡,请按实际使用的声卡选择子项。
- n USB devices:USB接口的声卡,请按实际使用的声卡选择子项。
- n PCMCIA devices:PCMCIA接口的声卡,请按实际使用的声卡选择子项。
- n Open Sound System:在一般情况下,建议选择N。
- 28)USB support
- USB支持。包括以下子选项。
- n Support for Host-side USB:主机端(Host-side)USB支持。通用串行总线(USB)是一个串行总线子系统规范,它比传统的串口速度更快并且特性更丰富(供电、热插拔,最多可接127个设备等),有望在将来统一PC外设接口。USB的“Host”(主机)被称为“根”(也可以理解为是主板上的USB控制器),外部设备被称为“叶子”,而内部的节点则称为HUB(集线器)。基本上只要想使用任何USB设备都必须选择此项。另外,还需要从下面选择Y。至少一个Host Controller Driver(HCD),比如适用于USB 1.1的UHCI HCD support或OHCI HCD support,适用于USB 2.0的EHCI HCD(USB 2.0)support。如果拿不准的话把他们全部选择Y,一般也不会出问题。如果系统有设备端的USB接口(也就是系统可以作为叶子使用),请到USB Gadget中进行选择。
- n USB verbose debug messages:仅供调试使用。
- n USB device filesystem:在/proc/bus/USB里列出当前连接的USB设备(mount-t USBfs none/proc/bus/USB),这样用户空间的程序就可以直接访问这些USB设备。如果要使用USB设备的话就必须选择Y。
- n Enforce USB bandwidth allocation:执行USB带宽分配限制,禁止打开占用USB总线带宽超过90%的设备,选择N可能会导致某些设备无法正常工作。
- n Dynamic USB minor allocation:除非有超过16个同类型的USB设备,否则选择N。
- n USB selective suspend/resume and wakeup:USB设备的挂起和恢复。在一般情况下,建议选择N。
- n EHCI HCD(USB 2.0)support:USB 2.0支持(大多数2002年以后的主板都支持)。如果此项选择Y,一般来说OHCI或UHCI驱动选项同时需要也选择Y。
- n Full speed ISO transactions:由于USB 2.0支持低速(1.5Mbps)、全速(12Mbps)、高速(480Mbps)3种规格的外部设备,为了将全/低速设备对高速设备可用带宽的影响减到最小,在USB 2.0集线器中提供了一种事务转换(Transaction Translator)机制,该机制支持在HUB连接的是全/低速设备的情况下,允许主控制器与HUB之间以高速传输所有设备的数据,从而节省不必要的等待。如果没有外置的USB集线器可以选择N。
- n Root Hub Transaction Translators:带有USB 2.0接口的主板上都有一个根集线器(Root Hub),以允许在无须额外购买HUB的情况下就可以提供多个USB插口,其中的某些产品还在其中集成了事务转换(Transaction Translator)功能,这样就不需要再额外使用一个兼容OHCI或UHCI的控制器来兼容USB 1.1,即使不太清楚嵌入式系统所使用主板上的根集线器是否集成了事务转换功能,也可以安全地选择此项。
- n Improved Transaction Translator scheduling:如果有一个高速USB 2.0 HUB并且某些接在这个HUB上的低速或全速设备不能正常工作(显示'cannot submit datapipe: error-28'或'error-71'错误),可以考虑选择Y。
- n ISP116X HCD support:ISP1160/ISP1161主机USB控制器,是符合USB 2.0全速规范的单片主机控制器和设备控制器,支持OHCI标准。
- n OHCI HCD support:开放主机控制接口(OHCI)是主要针对嵌入式系统的USB 1.1主机控制器规范。如果不清楚,则选择N。
- n UHCI HCD(most Intel and VIA)support:通用主机控制器接口(UHCI)是主要针对PC的USB 1.1主机控制器规范。另外,EHCI也可能需要它。如果不清楚,则选择N。
- n Elan U132 Adapter Host Controller:如果嵌入式系统采用这种设备,则选择Y。
- n SL811HS HCD support:如果嵌入式系统采用这种设备,则选择Y。
- n USB Bluetooth TTY support:USB蓝牙TTY设备支持。如果嵌入式系统采用这种设备,则选择Y。
- n USB MIDI support:USB MIDI设备支持。如果嵌入式系统采用这种设备,则选择Y。
- n USB MODEM(CDC ACM)support:USB接口的猫或ISDN适配器。如果嵌入式系统采用这种设备,则选择Y。
- n USB Printer support:USB打印机。如果嵌入式系统采用这种设备,则选择Y。
- n USB Mass Storage support:USB存储设备(优盘、USB硬盘、USB软盘、USB CD-ROM、USB磁带、memory sticks、数码相机、读卡器等)。该选项依赖于SCSI device support,且大部分情况下还依赖于SCSI disk support(比如优盘或USB硬盘)。如果嵌入式系统采用这种设备,则选择Y。
- n USB Mass Storage verbose debug:仅供调试使用。
- n The shared table of common(或usual)storage devices:该模块包含一张记录了常用USB存储设备及其驱动的表格,这样无须重新编译模块即可在切换这些设备时自动邦定对应的驱动(还需要对 /etc/modprobe。conf进行相应的设置)。如果不清楚,则选择N。
- n USB Human Interface Device(full HID)support:USB人机界面设备(鼠标、键盘、游戏杆、手写板等操作计算机的设备),该驱动不能和USB HID Boot Protocol drivers同时使用。如果不清楚,则选择N。
- n HID input layer support:如果有USB接口的鼠标、键盘、游戏杆、手写板等输入设备,则选择Y。
- n Enable support for iBook/PowerBook special keys:苹果iBooks/PowerBooks键盘上的Fn/Numlock等功能键支持。如果不清楚,则选择N。
- n Force feedback support:力反馈设备。如果不清楚,则选择N。
- n /dev/hiddev raw HID device support:如果有USB监控装置或不间断电源(UPS)之类的非输入设备就选择Y。
- n USB HID Boot Protocol drivers:如果有绝对的把握确信不为嵌入式系统所使用的键盘和鼠标使用通常的HID驱动,而要使用Boot Protocol模式的HID驱动(常见于嵌入式环境),则选择Y。
- n Aiptek 6000U/8000U tablet support:一种手写板。如果嵌入式系统采用这种设备,则选择Y。
- n Wacom Intuos/Graphire tablet support:一种手写/绘图板。如果嵌入式系统采用这种设备,则选择Y。
- n Acecad Flair tablet support:一种数控绘图板。如果嵌入式系统采用这种设备,则选择Y。
- n KB Gear JamStudio tablet support:一种手写/绘图板。如果嵌入式系统采用这种设备,则选择Y。
- n Griffin PowerMate and Contour Jog support:一种具有调节音量、滚动文本、视频快进/快退等功能的产品。如果嵌入式系统采用这种设备,则选择Y。
- n USB Touchscreen Driver:USB触摸屏驱动。如果嵌入式系统采用USB触摸屏硬件,则选择Y。
- n Yealink USB-p1k voip phone:一种VoIP电话。如果嵌入式系统采用这种设备,则选择Y。
- n X-Box gamepad support:X-Box游戏板。如果嵌入式系统采用这种设备,则选择Y。
- n ATI/X10 USB RF remote control:一种USB远程控制设备。如果嵌入式系统采用这种设备,则选择Y。
- n ATI/Philips USB RF remote control:一种USB远程控制设备。如果嵌入式系统采用这种设备,则选择Y。
- n Keyspan DMR USB remote control:一种USB远程控制设备。如果嵌入式系统采用这种设备,则选择Y。
- n Apple USB Touchpad support:苹果机上的触摸板。如果嵌入式系统采用这种设备,则选择Y。
- n USB Mustek MDC800 Digital Camera support:一种数码相机。如果嵌入式系统采用这种设备,则选择Y。
- n Microtek X6USB scanner support:一种扫描仪。如果嵌入式系统采用这种设备,则选择Y。
- n USB Network Adapters:USB网络适配器,如果有这种设备请根据嵌入式系统实际使用的硬件选择子项。
- n USB Monitor:USB流量监控。在一般情况下,建议选择N。
- n USS720 parport driver:一种USB接口转并口的转换设备。如果嵌入式系统采用这种设备,则选择Y。
- n USB Serial Converter support:USB接口转串口的转换设备。如果嵌入式系统采用这种设备,则选择Y。
- n EMI 6|2m USB Audio interface support:一种USB音频设备。如果嵌入式系统采用这种设备,则选择Y。
- n EMI 2|6 USB Audio interface support:一种USB音频设备。如果嵌入式系统采用这种设备,则选择Y。
- n ADU devices from Ontrak Control Systems:Ontrak Control Systems公司的一种自动拨号设备。如果嵌入式系统采用这种设备,则选择Y。
- n USB Auerswald ISDN support:一种ISDN设备。如果嵌入式系统采用这种设备,则选择Y。
- n USB Diamond Rio500 support:一种MP3播放器。如果嵌入式系统采用这种设备,则选择Y。
- n USB Lego Infrared Tower support:一种无线发射机。如果嵌入式系统采用这种设备,则选择Y。
- n USB LCD driver support:USB液晶显示器。如果嵌入式系统采用这种设备,则选择Y。
- n USB LED driver support:USB发光二极管。如果嵌入式系统采用这种设备,则选择Y。
- n Cypress CY7C63xxx USB driver support:德国AK Modul-Bus Computer GmbH公司的一种产品。如果嵌入式系统采用这种设备,则选择Y。
- n Cypress USB thermometer driver support:一种温度计。如果嵌入式系统采用这种设备,则选择Y。
- n USB Phidgets drivers:来自Phidgets公司的各种USB产品。如果嵌入式系统采用这种设备,则选择Y。
- n Siemens ID USB Mouse Fingerprint sensor support:西门子公司的一种指纹传感器。如果嵌入式系统采用这种设备,则选择Y。
- n Elan PCMCIA CardBus Adapter USB Client:Elan公司的一种USB转PCMCIA的适配器。如果嵌入式系统采用这种设备,则选择Y。
- n Apple Cinema Display support:苹果公司的一种Cinema Display。如果嵌入式系统采用这种设备,则选择Y。
- n USB 2.0 SVGA dongle support(Net2280/SiS315):一种软件狗。如果嵌入式系统采用这种设备,则选择Y。
- n USB LD driver:USB LD驱动。如果嵌入式系统采用USB LD硬件,则选择Y。
- n PlayStation 2 Trance Vibrator driver support:SONY的PS2上面的“入迷振荡器”,类似于力反馈手柄。如果嵌入式系统采用这种设备,则选择Y。
- n USB testing driver:这是一种测试中的驱动。在一般情况下,建议选择N。
- n USB DSL modem support:对USB DSL猫的支持。如果嵌入式系统采用这种设备,则选择Y。
- n USB Gadget Support:USB杂项支持。如果不清楚,则选择N。
- 29)MMC/SD Card support
- MMC/SD卡支持。如果嵌入式系统采用此类设备,则选择Y。
- 30)LED devices
- 发光二级管(LED)设备。如果嵌入式系统采用此类设备,则选择Y。
- 31)InfiniBand support
- InfiniBand是一个通用的高性能I/O规范,它使得存储区域网中以更低的延时传输I/O消息和集群通信消息并且提供很好的伸缩性。用于Linux服务器集群系统。如果不清楚,则选择N。
- 32)EDAC-error detection and reporting(RAS)
- 错误检测与纠正(EDAC)的目标是发现并报告,甚至纠正在计算机系统中发生的错误,这些错误是由CPU或芯片组报告的底层错误(内存错误、缓存错误、PCI错误、温度过高等)。在一般情况下,建议选择Y。如果这些代码报告了一个错误,请到以下网站查看更多信息。
- n http://bluesmoke.Sourceforge.net/。
- n http://buttersideup.com/edacwiki/。
- 该选项包括以下子选项。
- n Debugging:仅供调试使用。
- n Main Memory EDAC(Error Detection And Correction)reporting:一些系统能够检测和修正主内存中的错误,EDAC能够报告这些信息(EDAC自己检测到的或者根据ECC得到的)。EDAC还会尽量检测这些错误发生在哪里,以便于替换损坏的内存。建议选择并按照实际使用的芯片组选取子项。
- n Error detecting method:错误检测方法,当前只有一个Poll for errors(错误轮询)可用。如果不清楚,则选择N。
- 33)Real Time Clock
- 所有的PC主板都包含一个电池动力的实时时钟芯片,以便在断电后仍然能够继续保持时间,RTC通常与CMOS集成在一起,因此BIOS可以从中读取当前时间。该选项包括以下子选项。
- n RTC class:通用RTC类支持,选择此项后就可以在操作系统中使用一个或多个RTC设备,还必须从下面启用一个或多个RTC接口。如果不清楚,则选择N。
- n Set system time from RTC on startup:系统启动时使用从指定的RTC设备中读取的时间来设定系统时间,通常这将有助于避免不必要的文件系统检测程序(fsck)的运行。在一般情况下,建议选择Y。
- n The RTC to read the time from:指定具体从哪个RTC设备中读取时间。如果不清楚,则选择N。
- n RTC debug support:仅供调试使用。
- n sysfs:允许通过sysfs接口使用RTC,允许多个RTC设备,也就是/sys/class/RTC/ RTC0_N。如果不清楚,则选择N。
- n proc:允许通过proc接口使用RTC,仅允许一个RTC设备,也就是/proc/driver/RTC。如果不清楚,则选择N。
- n dev:允许通过dev接口使用RTC,允许多个RTC设备,也就是udev设置的/dev/RTC0_N,建议建立一个指向其中之一的软连接/dev/RTC,某些程序(比如hwclock)需要使用/dev/RTC。如果不清楚,则选择N。
- n RTC UIE emulation on dev interface:该选项的作用是,如果底层RTC芯片接口没有提供RTC_UIE支持,就仿真一个RTC_UIE。如果不清楚,则选择N。
- 34)DMA Engine support
- 从Intel Bensley双核服务器平台开始引入的数据移动加速(Data Movement Acceleration)引擎,它将某些传输数据的操作从CPU转移到专用硬件,从而可以进行异步传输并减轻CPU负载。Intel已将此项技术变为开放的标准,将来应当会有更多的厂商支持。该选项包括以下子选项。
- n TCP receive copy offload:通过在网络栈中利用DMA引擎来减少接收数据包时的copy-to-user操作,以释放CPU资源,这是DMA引擎目前最主要的用途。如果不清楚,则选择N。
- n Intel I/OAT DMA support:Intel I/O加速技术(Intel I/O Acceleration Technology)中的DMA支持,基于Intel Bensley的新一代服务器平台都支持它。如果不清楚,则选择N
- 4. make bzImage , 用于编译内核,生成的bzImage在arch/[cpu]/boot
- 5.
- 6.
- 7. make modules (编译内核)
- 一般需要1~2小时的时间。这些模块源于使用命令make menuconfig启动的菜单型配置界面中选择的项
- 8. make modules_install安装内核
- 9. 制作init ramdisk mkinitrd initrd-2.6.16 2.6.16
- 10. 安装内核 cp initrd-2.6.16 /boot
- cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.16
- 11.修改启动配置文件/etc/grub.conf
- 12.重启