模块定制linux系统,定制一个自己的专属linux系统

怎样自己从内核开始定制一个自己的专属系统:

如今电脑种类繁多,系统也形形***,我们从网上下载的系统是否能完成自己所要的功能?而功能多的系统往往占内存大,且有一些我们用不到的功能。那么下边我们便来根据自己的电脑配置属性来给自己量身打造一个自己的专属系统。

首先我们需要查看一下自己电脑的一些硬件属性,以方便一会的系统定制功能选取。

本实验环境为虚拟机实现。

查看CPU:cat /proc/cpuinfo

查看内存:cat /proc/meminfo

各种桥设备的信息:lspci

24b5b3dd9621033c5bd292d69d90e837.png

2bf80511785fc9c29ca784c290bfbe8e.png

查看USB信息:lsusb

查看cpu:lscpu

查看块设备:lsblk

准备系统编译条件:

首先需要将系统编译需要的库文件安装上,

下载一个Linux最新的kernel,本实验使用的是linux-3.13.6.tar.xz

tar xf linux-3.13.6.tar.xz -C /usr/src

cd /usr/src

ln -sv linux-3.13.6 linux

cd linux

make allnoconfig

内核编译准备:

编译有三种选择

Y --将该功能编译进内核   (*)

N--不将该功能编译进内核 ( )

M--将该功能编译成可以在需要时动态插入到内核中的模块(M)

Code maturity level options

-->prompt for development and/or incomplete code/drivers,如果你要试验现在仍处于实验阶段的功能就必须把该项选择为Y了;否则可以把它选择为N。

Loadable module support :对模块的支持。

-->Enable loadable module support:加载模块

-->Set version information on all module symbols:可以不选

-->Kernel module loader:让内核在启动时有自己装入必需模块的能力

Processor type and features :CPU类型

-->Processor family:选择CPU类型。

-->High Memory Support:大容量内存的支持。

-->MTTR support:MTTR支持。可不选。

-->Symmetric multi-processing support:对称多处理支持。

General setup :属性进行设置。

-->Networking support:网络支持。必须,没有网卡也建议你选上。

-->PCI support:PCI支持。

-->PCI access mode:PCI存取模式。可供选择的有BIOS、Direct和Any,

-->Support for hot-pluggabel devices:热插拔设备支持

-->PCMCIA/CardBus support:PCMCIA/CardBus支持。。

-->System V IPC :sysv风格

-->BSD Process Accounting :BSD风格

-->Sysctl support:以上三项是有关进程处理/IPC调用

-->Power Management support:电源管理支持。

-->Advanced Power Management BIOS support:高级电源管理BIOD支持。

Memory Technology Device(MTD) :MTD设备支持

Parallel port support :串口支持

Plug and Play configuration即插即用支持。

Block devices :块设备支持。

-->Normal PC floppy disk support:普通PC软盘支持。

-->Mulex DAC960/DAC1100 PCI RAID Controller support:RAID镜像用的。

-->Loopback device support:

Network block device support:网络块设备支持。

Logical volume manager(LVM)support:逻辑卷管理支持。

Multiple devices driver support:多设备驱动支持。

RAM disk support:RAM盘支持。

Networking options :网络选项。

-->TCP/IP networking

-->Unix domain sockets

-->UNIX: socket monitoring interface(nginx的支持)

Telephony Support :电话支持

ATA/IDE/MFM/RLL support :这个是有关各种接口的硬盘/光驱/磁带/软盘支持

SCSI support :SCSI设备的支持。

Network device support :网络设备支持。

-->Ethernet(10 or 100 Mbit)

-->Ethernet(1000Mbit)、

-->Wireless LAN(non-hamradio)、

-->Token Ring device、

-->Wan interfaces、

-->PCMCIA network device support

ISDN subsystem :ISDN上网

File systems :文件系统。

-->Quota support:限制每个用户可以使用的硬盘空间的上限,

-->DOS FAT fs support:DOS FAT文件格式的支持,

-->ISO 9660 CD-ROM file system support:光盘使用的文件格式。

-->NTFS file system support:ntfs是NT使用的文件格式。

-->/proc file system support:用户和系统进行交互的通道

-->Network File Systems:网络文件系统

-->Partition Types:分区类型

-->Native Language Support:本地语言支持

Console drivers :控制台驱动。

-->VGA text console

Sound :声卡驱动。

USB supprot :USB支持。

我自己本实验勾选的选项要手动勾选的内核选项

64-kit kernel                                                    64位支持

Ceneral setup

--> Local version - append to kernel release   版本号定制

--> System V IPC                                            sysV风格支持

Enable loadable module support

--> Module unloading                                 模块卸载

Enable the block layer

--> Block layer SG support v4

Processor type and features

--> Symmetric multi-processing support

--> Processor family

--> Core 2/newer Xeon                                内核选择

--> Multi-core scheduler suppor

Bus options (PCI etc.)                                   系统总线

--> PCI support

Executable file formats / Emulations

--> Kernel support for ELF binaries

--> Kernel support for scripts starting with #!

Networking support

--> Networking options

--> TCP/IP networking                            网络功能支持

--> Unix domain sockets                         支持nginx

--> UNIX: socket monitoring interface

Device Drivers                                             自动挂载,文件系统挂载支持

--> Generic Driver Options

--> Maintain a devtmpfs filesystem to mount at /dev

--> Automount devtmpfs at /dev, after the kernel mounted the rootfs

--> SCSI device support                                 SCSI磁盘驱动支持

--> SCSI device support

--> SCSI disk support

--> Fusion MPT device support

--> Fusion MPT ScsiHost drivers for SPI

--> Fusion MPT logging facility

--> Network device support

--> Ethernet driver support

--> Intel devices                                网卡驱动支持

--> Intel(R) PRO/1000 Gigabit Ethernet support

--> Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support

--> Input device support                             鼠标键盘支持

--> Mouse interface

--> Keyboards

--> Mice

--> USB support                                          USB功能支持,

--> xHCI HCD (USB 3.0) support

--> EHCI HCD (USB 2.0) support

--> OHCI HCD (USB 1.1) support

--> UHCI HCD (most Intel and VIA) support

File systems

--> The Extended 4 (ext4) filesystem      ext4文件系统

选择完成后,保存

编译内核:

make -j 2

让它慢慢泡着吧,我们下边准备一下磁盘分区

挂载一个磁盘,10G

fdisk分区,一个50M,一个500M

mke2fs -t ext4 /dev/sdd1

mke2fs -t ext4 /dev/sdd2

mkdir /mnt/{boot,sysroot}

mount /dev/sdd1 /mnt/boot

mount /dev/sdd2 /mnt/sysroot

30c177ba81e32fa4c5074d3c24612813.png

[root@www~]# ls /mnt/boot/

grub lost+found

[root@www~]# vim /mnt/boot/grub/grub.conf

d027dbb5e1e91f7c54acb8ac98fc3a70.png

f1ca74e2b0b772e437f9520817418ea9.png

vim sbin/init

452113d2258cc8c3205d5ec36151b5cf.png

chmod +x sbin/init

86a3d0ec30e8b601e82f3a9aca430ed2.png

内核编译完成后它会在当前目录下生成arch/x86/boot/bzImage

bzImage就是编译好的内核。

系统要运行许多命令都依赖于GCC标准库,可是GCC标准库太大,移植过去太麻烦,所以就有了BUSYBOX这个可以模拟出大多数常用命令的工具,下边我们讲一下怎么把busybox加进去。

BUSYBOX

编译busybox:busybox-1.22.1.tar.bz2

tar -xf busybox-1.22.1.tar.bz2

cd busybox-1.22.1.tar.bz2/

编译busybox需要glibc-static 此库存在于CentOS6.5的第二张光盘镜像

make menuconfig

一定要选定Build BusyBox as a stayic binary

1f535e0daab45011be1cc2bb49f01e01.png

make编译开始

cp -a /root/busybox-1.22.1/_install/* /mnt/sysroot/

sync

sync

chroot /mnt/sysroot 测试启动

cd /mnt/sysroot/

创建/mnt/sysroot/etc/inittab

vim etc/inittab::sysinit:/etc/rc.d/rc.sysinit       -----------init的固定格式

console::respawn:-/bin/sh

::ctrlaltdel:/sbin/reboot          -----------执行ctrl+Alt+del时执行/sbin/reboot文件

::shutdown:/bin/umount -a -r  -----------  -a  -r 卸载所有的文件系统,所以还需要提供一个fstab文件

vim etc/fstab                           -----------定义的自动挂载的选项/dev/sda2   /   ext4  defaults   0   0

/dev/sda1   /boot   ext4  defaults   0   0

proc   /proc   proc   defaults   0   0

sysfs   /sys     sysfs   defaults   0   0

我们可以看到,在etc/inittab文件中还有etc/rc.d/rc.sysinit文件,所以我们创建之

mkdir  etc/rc.d

vim etc/rc.d/rc.sysinit#!/bin/sh

#

ehco -e "Welcome to \033[32mAOLENS\033[0m Linux "

echo "Remouting root filesystem"

mount -n -o remount,rw  /dev/sda2  /

echo "mount all filesystem"

mount -a

echo "create device file"

mdev -s                              自动创建设备文件,在/dev/下

给他执行权限chmod +x  etc/rc.d/rc.sysinit

挂起宿主机,创建一个新的虚拟机,定义使用宿主机上的/dev/sdd磁盘,启动Linux系统,求佛祖保佑不要出错!!!哈哈

下边就是我们启动的界面,是使用的/bin/sh   shell 命令也都可以使用。

3289bc1ab2fe620560d2e31ca7cc433b.png

到现在系统已经算成功配建起来了,当然这个系统还没有给大家提供登陆的接口,下边我们变为系统添加上这一项:

我们又切回宿主机来。在/mnt/sysroot/下

而要实现登陆,就是要提供终端,而我们编辑的etc/inittab中console是直接打开页面,不提示登陆,提示登陆的是一个名为getty的程序

我们来看看getty

4b427cfbd32943c13c6ce82a918efeb9.png

我们用getty来替换console

vim etc/inittab::sysinit:/etc/rc.d/rc.sysinit       -----------init的固定格式

::respawn:/sbin/getty 19200 tty1

::respawn:/sbin/getty 19200 tty2

::respawn:/sbin/getty 19200 tty3

::respawn:/sbin/getty 19200 tty4

::respawn:/sbin/getty 19200 tty5

::respawn:/sbin/getty 19200 tty6

::ctrlaltdel:/sbin/reboot          -----------执行ctrl+Alt+del时执行/sbin/reboot文件

::shutdown:/bin/umount -a -r  -----------  -a  -r 卸载所有的文件系统,所以还需要提供一个fstab文件

这下回去调用login来登陆,可是我们现在还没有账号!

所以下来我们来创建账号。密码

vim etc/passwd                    创建用户root:x:0:0::/root:/bin/sh

aolens:x:500:500::/home/aolens:/bin/sh

mkdir home/aolens

vim etc/group                      创建组root:x:0:

aolens:x:500:

vim etc/shadow                     创建密码openssl passwd -1 -salt 'openssl rand -hex 4'

$1$openssl $spUllMGiqUoDT/EmfdEVL.

root:$1$openssl $spUllMGiqUoDT/EmfdEVL.:16113:0:99999:7:::

aolens:$1$openssl $spUllMGiqUoDT/EmfdEVL.:16113:0:99999:7:::

提供显示信息

vim etc/profileexport PS1='[\u@\h \W]\$'

提供用户名显示:

mdkir etc/sysconfig

vim  etc/sysconfig/networkHOSTNAME=www.aolens.com

修改etc/rc.d/rc.sysinit为#!/bin/sh

#

echo -e "Welcome to \033[32maolens\033[0m Linux"

echo "Remounting root filesystem"

mount -n -o remount,rw /dev/sda2 /

echo "mount all filesystem"

mount -a

echo "create device file"

mdev -s

[ -r /etc/sysconfig/network ] && source /etc/sysconfig/network

[ -z "HOSTNAME" -o "HOSTNAME" == '(none) ] && hostname localhost || hostname $HOSTNAME  ###修正后的

出错了,是什么原因呢?

96ae6989fc9954aa63d1ade917b6e907.png

查看,原来是我们把单引号写到)里边了。

8e3821d0ae53d1903a9e6234e842a98e.png

切换太快使得在宿主机的操作没有同步过来,悲剧啊。。。。

把/mnt/sysroot/下的文件归档一下

find . |cpio -o -H newc |gizp -9 > /root/sys.gz

卸载/dev/sdd2

ad76a7f375fb2760ed276a70792897fa.png

格式化重新挂载。

d2f805e0b21ec59b2817f532833189bd.png

gunzip /root/sys.gz

cpio -i < /root/sys

重启,OK!!!

30775ae30ee1cecbc82c18cbef9bbf65.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值