首页 > 代码库 > 打造一个属于你自己的Linux操作系统

打造一个属于你自己的Linux操作系统

   Linux是一个开源的操作系统,我们可以对他进行更改,让他符合我们的需求,这也是Linux的热爱者比windows多的因为,作为一个Linux爱好者,如果不能自己手动制作一个Linux,那岂不是“丢人”呢。下面将介绍一个Linux的制作方法

在制作定制的linux时,要将所有的开发环境安装完整
Development Tools

首先,我们要下载linux的内核,并且解压缩

[root@localhost src]#tar xf linux-3.13.6.tar.xz

创建符号链接

[root@localhost src]#ln -sv linux-3.13.6 linux

将默认的选项全部取消

[root@localhost linux]# make allnocinfig

选定内核编译时,我们需要的选项

[root@localhost linux]# make menuconfig

选择如下:标*号选择项

1、*64-bit kernel
选择64位的内核支持2、General setup  —>  
    *Local version – append to kernel release
    添加为cshang linux-3(自己随便填写)
版本号,自己定义
3、*Enable loadable module support  —>
    *Module unloading
开启装卸载模块支持
4、Enable the block layer  —>
    *Block layer SG support v4
允许使用块层
 
5、Processor type and features  —>
处理类型和特点
    *Symmetric multi-processing support
    开启多处理器
     Processor family (Core 2/newer Xeon)  —>
        *Core 2/newer Xeon
        支持intel的cpu
    *Multi-core scheduler support (NEW)
    支持多核调度 
6、 Bus options (PCI etc.)  —>
    *PCI support
    支持PCI总线
7、 Executable file formats / Emulations  —>
    *Kernel support for ELF binaries
    *Kernel support for scripts starting with #! 
内核上可执行文件的格式:ELF的二进制,shell脚本
8、 Device Drivers  —>
设备驱动
    SCSI device support  —>
    SCSI硬盘的驱动
        *SCSI device support
        *SCSI disk support
        SCSI的硬件驱动和磁盘驱动
    *Fusion MPT device support  —> 
        *Fusion MPT ScsiHost drivers for SPI
        *Fusion MPT logging facility
    *USB support  —>
        *Support for Host-side USB
        *EHCI HCD (USB 2.0) support
        *OHCI HCD (USB 1.1) support
        *UHCI HCD (most Intel and VIA) suppor
        开启USB的支持,有2.0,1.1的接口,包括Intel的VIA
    Input device support  —>
        *Mouse interface
        *Keyboards  —>
        *Mice  —>
        输入设备驱动:鼠标接口,键盘,鼠标
    Generic Driver Options  —>
        *Maintain a devtmpfs filesystem to mount at /dev
        *Automount devtmpfs at /dev, after the kernel mounted the rootfs
        挂载系统时,包含dev的文件系统,而且当内核挂载根文件系统后
        将dev的文件系统自动挂载到/dev下
        上面这项是我没选到的,困扰了我一天半加一个晚上
9、 File systems  —>
    *The Extended 4 (ext4) filesystem
    开启支持ext4的文件系统支持
10、*Networking support  —>
    Networking options  —>
        *Unix domain sockets
        同一主机间的进程间通信,对于开启后面的nginx服务需要
        *TCP/IP networking
            *IP: multicasting                 
            *IP: advanced router   
            *IP: policy routing                                                        
            *IP: equal cost multipath                                                     
            *IP: verbose route monitoring
        开启TCP/IP的支持
 
11、Device Drivers  —>
    *Network device support  —>
         *Network core driver support
         *Ethernet driver support  —>
            *Intel devices
            *Intel(R) PRO/1000 Gigabit Ethernet support
            *Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support
            对于不用的网卡选项,我们可以不选
        以上为编译时加载网络相关的驱动

编译内核

[root@localhost linux]# make -j 4

这里是开启4个线程同时编译
编译会生成一个arch/x86/boot/bzImage的文件

为目标主机制作系统
fdisk /dev/sdb
sdb1为50M,sdb2为512M

格式化分区,并进行挂载

[root@localhost ~]# mke2fs -t ext4 /dev/sdb1
[root@localhost ~]# mke2fs -t ext4 /dev/sdb2
[root@localhost ~]# mkdir /mnt/{boot,sysroot}
[root@localhost ~]# mount /dev/sdb1 /mnt/boot/
[root@localhost ~]# mount /dev/sdb2 /mnt/sysroot/

为目标主机生成grub引导程序

[root@localhost ~]# grub-install –root-directory=/mnt/ /dev/sdb

为grub引导提供配置文件

[root@localhost ~]# vim /mnt/boot/grub/grub.conf
timeout=5
default=0
title c-shang‘s Mini Linux (3.13.6)
        root (hd0,0)
        kernel /bzImage ro root=/dev/sda2  init=/sbin/init

安装busybox为目标主机提供程序、命令

[root@localhost src]# tar xf busybox-1.22.1.tar.bz2

编译安装busybox,采用静态安装

[root@localhost busybox-1.22.1]# make menuconfig
Busybox Settings  —>  Build Options  —>
            *Build BusyBox as a static binary (no shared libs)
[root@localhost busybox-1.22.1]# make -j 4
[root@localhost busybox-1.22.1]# make install

生成的文件都在当前目录下的_install目录中

将busybox生成的程序文件拷贝到目标主机上

[root@localhost busybox-1.22.1]# cp -a /usr/src/busybox-1.22.1/_install/* /mnt/sysroot/

为目标主机创建系统目录

[root@localhost busybox-1.22.1]# cd /mnt/sysroot/
[root@localhost sysroot]# for i in `ls /`;do mkdir $i;done

使目录主机支持用户登录功能,用户为root和luffy,密码为sch

为目录主机准备一系列配置文件,在/mnt/sysroot目录下

[root@localhost sysroot]# vim etc/inittab
::sysinit:/etc/rc.d/rc.sysinit
tty1::respawn:/sbin/getty   19200  tty1
tty2::respawn:/sbin/getty   19200  tty2
tty3::respawn:/sbin/getty   19200  tty3
tty4::respawn:/sbin/getty   19200  tty4
::ctrlaltdel::/sbin/reboot
::shutdown:/bin/umount -a -r

创建自动挂载文件系统的配置文件

[root@localhost sysroot]# 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

创建init程序启动后调用的脚本程序

[root@localhost sysroot]# mkdir etc/rc.d
[root@localhost sysroot]# vim etc/rc.d/rc.sysinit
#!/bin/sh
#the script of the system begin
echo -e "\033[32mWelcome to c-shang‘s Mini Linux\033[0m"
mount -n -o remount,rw  /dev/sda2
mount -a
mdev  -s    #自动创建设备文件
[root@localhost sysroot]# chmod +x etc/rc.d/rc.sysinit

创建账号文件

[root@localhost sysroot]# vim etc/passwd
root:x:0:0::/root:/bin/sh
luffy:x:500:500::/home/luffy:/bin/sh

为用户创建密码文件

[root@localhost sysroot]# openssl passwd -1 -salt `openssl rand -hex 4`
Password:         #输入sch
$1$7f5be4e4$Lyc99NCEhov63faNUKHtP/
[root@localhost sysroot]# vim etc/shadow
root:$1$4b2741bf$Dx190CllodtsmR29/e6CF/:16733:0:99999:7:::
luffy:$1$4b2741bf$Dx190CllodtsmR29/e6CF/:16733:0:99999:7:::

上面的格式一定要正确,由于我少写了一部分,导致我认证无法通过,但是通过
排查,觉得无法登陆,问题肯定是在关于用户的这些文件上,排查成功

[root@localhost sysroot]# chmod go= etc/shadow    #更改权限

为用户添加组文件

[root@localhost sysroot]# vim etc/group
root:x:0
luffy:x:500

为普通用户创建家目录

[root@localhost sysroot]# mkdir home/luffy

最后,将内核编译生成的bzImage文件拷贝到目录系统上

[root@localhost ~]# cp /usr/src/linux/arch/x86/boot/bzImage /mnt/boot/

创建一个新的虚拟机,把宿主机上sdb硬盘加载上去

这样,一个定制的linux系统就完成了

  到此,手动制作的Linux就完成了,是不是有些成就感了,下一个步骤,我们还可以在上面的基础上,busybox,提供远程登录的功能。

本文出自 “牛叉的孩子光着屁屁” 博客,请务必保留此出处http://cshang.blog.51cto.com/6143980/1565671

打造一个属于你自己的Linux操作系统