编译mini linux流程

centos6

1、yum groupinstall "Development Tools" "Server Platform Development" -y

2、下载内核

tar xf 下载文件.tarr.xz  -C /usr/src

3 cd /usr/src

4、ln -sv 解压文件 linux

5、cd linux

6、ls /boot/

make hellp 查看帮助手册

7、make allnoconfig  (所有可选择特性通通关掉)

ls -a

less .config

要想编译内核首先要查看当前硬件平台各种状态信息cup型号硬盘借口型号等,命令:lscpu 、lspci 、等

8、make menuconfig   选择特性


* 64-bit kennel  (编译成64内核)

  File systems 可被模块化功能→ * Second extended fs support

                                                → * The Extended 4 (exit4) filesystem   扩张文件系统类型

                                 可不选项 →*  Ext4 POSIX Acess Control LIsts (NEW)  文件的访问控制权限列表

 能支持哪些可执行文件格式,linux支持elf格式和#!开头的shell脚本

Executable file formats / Emulations → * Kernel support for ELF binaries

                                                            → * Write ELF core dumps with partial segments (NEW)

                                                            → * Kernel support for scripts starting with #!

* Enble loadable module support   支持模块装载

* module unloading (NEW)   支持模块动态卸载

不启用 Module signature verification (NEW)   模块签名验证

 processor type and featuress 处理器类型和功能 → processor family (ceneric-x86-64) → *二选一: X Core 2/newer xeon / X ceneric-x86-64

                                                                             → *Symmetric multi-processing support 对称对核器的支持

 Bus options (PCL etc.) → *PCI support 支持PCI

##额外知识点:硬盘驱动,如果没驱动要借助ramdisk实现,

首先打开另外窗口命令lscpi查看虚拟机硬盘接口类型 storage controller: LSI(接口型号)  logic / Symbios logic 53c1030 PCI-X  Fusion-MPT(格式)  Dual Ultra320 SCSI (rev 01)

 Device Drivers 设备驱动程序 → SCSI device support → * SCSI device support

                                                                                      → * SCSI disk support (NEW)

                                                ↓ USE支持类型接口命令:lsusb 或者lsusb -v可以查看,根据类型选择驱动 ↓

                                                →  * USB support  USB驱动→ * Support for host-side USB

                                                                                             → * EHCI HCD (USB 2.0)supprot

                                                                                             → * EHCI HCD (USB 3.0)supprot (NEW)

                                                                                             →  * UHCI HCD (most intel and VIA) support

                                                                                             →  *  OHCI HCD support

                                                → Input device support 输入驱动 → * Keyboards → * AT keyboard (NEW) 标准键盘驱动

                                                                                                     → * Mouse interface  鼠标驱动

                                                                                                     → * Mice → * PS/2 mouse (NEW)

                                                → Fusion MPT device support ( Fusion MPT格式做进内核)→ * Fusion MPT ScsiHost drivers for SPI

                                                                                                                                                  → *Fusion MPT ScsiHost drivers for FC

                                                                                                                                                  → *Fusion MPT ScsiHost drivers for SAS

                                                                                                                                                  → * Fusion MPT misc device (ioct1) driver 这项至关重要

                                                                                                                                                  → * Fusion MPT logging facility 日志功能不怎么重要

 Device Drivers 设备驱动程序 →Ceneric Driver Options 特殊驱动程序选项→ * Maintain a devtmpfs filesystem to mount ati /dev内核所识别的设备文件通通出到/dev目录下,让dev/目录下也有设备文件(不能识别的装入模块的还得uduv来创建)→ * Automount devtmpfs at /dev after the kernel mountch the rootfs    注明:init运行系统才选择此项,否则可不予选择

底下还有一项编译网卡驱动供参考↓

 

 


9、make -j 4 bzImage  (只编译内核文件,编译BZ2压缩格式的内核)

编译内核完成;复制一下最后显示内核路径

10、shutdown -h now

添加硬盘 保存在个位置(这步骤原本编译前就该事前操作了,前面漏了)

11、开机

12、创建分区 创建文件系统 挂载分区

fdisk /dev/sdb

mke2fs -t exit4 /dev/sdb1

mke2fs -t exit4 /dev/sdb2

mkdri /mnt/{boot,sysroot}

grub-install --root-directory=/mnt /dev/sdb

ls /mnt/boot/grub/ 查看一下

mount /dev/sdb2 /mnt/sysroot/ 挂载文件系统   #目前内核还驱动不了文件体统

13、cd /usr/src/linux

cp /arch/x86/boot/bzImage /mnt/boot/bzImage   (复制内核到/mnt/boot/bzImage,地址先前有通知我们)

14、vim /mnt/boot/grub/grub.conf

default=0

timeout=3

title Mini linux (3.10.67)

        root (hd0,0)

       kernel /bzImage ro root=/dev/sda2 init=/bin/bash      //如果是用init运行系统则将 init=/bin/bash改为 init=/bin/init

15、sync 同步(我们启动默认在内存中完成,内存的数据同步到磁盘上,不然待会挂起数据还在内存当中)

16、挂起

17、新建虚拟机.  

1、i/o类型:要选择刚刚编译的驱动LSILogic(L), 上面编译驱动类型自行决定。

2、磁盘选择:使用现有虚拟磁盘→使用MINI_LINUX→保持现有格式→完成

启动虚拟机  (注:sync后别太快开机,不然数据还没完全同步到磁盘上)

18、此时开机会报错:kernel panic - not syncing no init found

 

        解决方法1:移一个bash进来,直接启动bash就OK了,此处不用此方法

解决方法2;提供真正文件系统busybox

以下编译busybox 方法:

1、cd /usr/src/linux

vim /usr/src/linux/init/main.c  查看主程序  此步骤可以忽略

2、cd /mnt/sysroot/

3、mkdri -pv etc dev proc sys bin sbin usr/{bin,sbin,lib,lib64} lib64 lib/modules home var/{log,run,lock} tmp mnt media root

4、cd

5、vim bincp.sh     复制程序(命令)到指定目录下,同时将其所依赖的库文件复制到对应的目录


#!/bin/bash

#

target=/mnt/sysroot

[ -d $target ] || mkdir /mnt/sysroot

read -p "A command: " command

 

libcp() {                                                                                //函数

for lib in $(ldd $1 |  grep -o "[^[:space:]]*/lib[^[:space:]]*"); do  //获取库路径。ldd可以列出一个程序所需要得动态链接库(so)

libdir=$(dirname $lib)                                                          //取库目录名 赋值给libdir

[ -d $target$libdir ] || mkdir -p $target$libdir

[ -f $target$lib ] || cp $lib $target$lib

done

}

 

while [ "$command" !='quit' ]; do                                          //$command不等于quit执行循环

       if ! which $command &> /dev/null; then                        //判断$command是否存在

       read -p "No such command, enter again: " command

       continue

       fi

          command=$(which --skip-alias $command)               //获取路劲 赋值给command

          comnddir=$(dirname $command)                                //取目录名字 赋值给comdir

 

[ -d $target$cmnddir ] || mkdir -p $target$cmnddir

[ -f $target$command ] || cp $command $target$command

libcp $command

read -p "Another command(quit): " command

done


保存退出后:

检测语法错误:bash -n bincp.sh

bash bincp.sh                //添加自己想用的程序(命令)

ls

bash

quit

 

6、chroot /mnt/sysroot/ /bin/bash      //改变根目录

7、sync

8、重启 mini linux  (不要启动太快,sync同步需要时间)

开机成功

 


以下是用init运行系统方法:

1、cd /mnt/sysroot/

2、vim /mnt/sysroot/sbin/init

#!/bin/bash

#

echo -e "\tWelcome to \033[032mMini\033[0m Linux"

mount -n -t proc proc /proc

mount -n -t sysfs sysfs /sys

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

/bin/bash

3、 chmod +x /mnt/sysroot/sbin/init

bash bincp.sh           //添加自己想用的程序(命令)

blkid

touch

top

quit

4、sync

5、type echo

6、cp arch/x86/boot/bzImage /mnt/boot/

7、sync

启动挂起

ls /dev 查看里面此时就有文件了

mount -n -t proc proc /proc

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

vim /

 


编译busybox:

Mini Linux: kernel+busybox          busybox也有udev不过名字叫mdev

busybox:

静态方式编译,依赖于glibc-static

1、下载busybox源文件

tar xf busybox-1.22.1.tar.bz2

cd busybox-1.22.1

Linux程序的编译安装两种方式:

1、共享库编译方式 : 每个程序运行时可能依赖到外部的共享库,我们移植时意味着我们必须将共享库也移植过去

2、静态编译方式:将所依赖各种库文件都直接编译到程序来,对程序来说只要一个文件就可以了

以下是静态编译到一个文件方法:

yum install -y glibc-static      //静态方式编译,依赖于glibc-static

make menuconfig                //编译选择

make && make insatll

cd /mnt/sysroot/   →  rm -rf ./*     //删除上面手动添加的文件

cp -a _install/* /mnt/sysroot/       //上面insatll完成生成的文件复制到/mnt/sysroot/下

chroot /mnt/sysroot/ /bin/ash

vim /mnt/boot/grub/grub.conf

default=0

timeout=3

title Mini linux (3.10.67)

        root (hd0,0)

       kernel /bzImage ro root=/dev/sda2 init=/bin/init

ls  查看一下根目录文件

mkdir -pv etc lib lib64 proc sys dev root home boot mnt media tmp var  //缺上面文件就创建上面文件

sync

vim etc/inittab        //重启开机时系统运行busybox时,busybox会到的配置文件

::sysinit:/etc/rc.d/rc.sysinit            //sysinit   系统初始化运行


三选一

console::respawn:-/bin/sh           //respawn  后面程序关了会重新启动一次               控制台  注:控制台跟终端三选一


三选一 ③       //建议使用这个登录界面的

::respawn:/sbin/getty 9600 tty1    //getty 会自动调用login来打印一个登录提示符  串型终端1  注:控制台跟终端三选一

::respawn:/sbin/getty 9600 tty2   //这三个都是登录界面用到的 可以设置6个终端  串型终端2  注:控制台跟终端三选一

::respawn:/sbin/getty 9600 tty3                                                                              串型终端3   注:控制台跟终端三选一


三选一

tty1::respawn://bin/sh                     //askfirst   默认补打开终端 启动终端巧回车键       终端2   注:控制台跟终端三选一

tty2::askfirst:/bin/sh                                                                                                       终端2   注:控制台跟终端三选一

tty3::askfirst:/bin/sh                                                                                                       终端3   注:控制台跟终端三选一


::ctrlaltdel:/sbin/reboot                 //ctrlaltdel  按ctrl+delete键会运行操作

::shutdown:/bin/umount -a -r       //shutdown  关机运行时运行操作

mkdir etc/rc.d

vim etc/rc.d/rc.sysinint

挂载

#!/bin/sh                    //此时没有BASH所以用sh

#

echo -e "\tWelcome to \033[032mMini\033[0m Linux"         //开机显示信息

mount -t proc proc /proc

mount -t sysfs sysfs /sys

echo "scan /sys and to populate to /dev..."                        //扫描/ sys并填充到/ dev

mdev -s

mount -o remount,rw /dev/sda2/

echo "mounting all filesystems..."

mount -a            //意思挂载剩余的文件系统


echo "Load driver for e1000...."    //装载网卡驱动

insmod /lib/modules/e1000.ko

echo "Initializing ehternet card..."   //初始化以太网卡

ifconfig eth0 192.168.0.117 up      //激活给IP地址  IP地址根据情况设定

ifconfig lo 127.0.0.1 up                //


设置主机名①

[ -f /etc/sysconfig/network ] && ./etc/sysconfig/network

[ -z "$HOSTNAME" -o "$HOSTNAME" == '(none)' ] && HOSTNAME='locahost'

hostname $HOSTNAME

接上设置主机名 ②

1、mkdir etc/sysconfig

2、vim etc/sysconfig/network

             HOSTNAME=XXXX名字     // 编辑:

chmod +x etc/rc.d/rc.sysinint

sync

重启


挂载文件系统:

编辑fstable

vim /etc/fstable

sysfs                /sys         sysfs           defaults         0  0

proc                 /proc         proc           defaults         0  0

/dev/sda1         /boot         ext4          defaults         0  0

/dev/sda2         /                ext4          defaults         0  0

devtmpfs          /dev          ext4          defaults          0  0    //开机会自动挂载可以不用写这行
 

由于上面操作出错proc无法挂载我们直接复制程序(命令)到指定目录下,同时将其所依赖的库文件复制到对应的目录:

bash bincp.sh

mount

quit

sync  //同步

重启

 


编译网卡驱动:

命令:lspci查看网卡设备

modinfo e1000   查看模块信息

cd /usr/src

cd /linux             //上面下载解压保存的原文件

make menuconfig          //重新编译添加网络功能

Networking support → Networking options开启全网络功能 → * Tcp/IP networking      //网络最主要一项

                                                                                             → * IP: multicasting        //组播或者多播

                                                                                             → * IP:advanced router    //高级路由   

                                                                                             → * IP:Kernel level autoconfiguration   //内核级自动配置

Device Drivers → * Network device support → * Ethernet driver support → * Intel devices (NEW) → * Inter (R) PRO/1000 Gigabit Ethernet support英特尔(R)PRO / 1000千兆以太网支持  (根据实际情况选择)         //编译网卡驱动

make -j 4 bzImage

cp arch/x86/boot/bzImage /mnt/boot/

sync

启动开机

ifconfig -a              //查看

ifconfig eth0 192.168.0.117 up     //激活给IP地址

ifconfig lo 127.0.0.1 up               //

ping 一下IP地址测试

完成

 

假设:如果上述不是直接编译内核而是编译成模块 需要单独编译一下

cd /usr/src

cd /linux             //上面下载解压保存的原文件

make M=drivers/net/ethernet/intel/e1000/       //找到e1000的位置编译

mkdir /mnt/sysroot/lib/modules -pv          //注:事先查看此目录没有,没有在创建

cp drivers/net/ethernet/intel/e1000/e1000.ko /mnt/sysroot/lib/modules    //编译生成的模块放到此目录下

sync    同步

重启

insmod /lib/modules/e100.ko     //手动装载模块,

此时ifconfig没有地址,驱动程序开机不会自动装载。需要在sysctl目录写个脚本扫描识别有哪些新的设备,而后找到合适的驱动程序,此步骤很复杂

 


创建帐号密码:

touch /etc/passwd /etc/group /etc/shadow

adduser root

sync

cd /mnt/sysroot/

chroot /mnt/sysroot/ /bin/sh       //切换根文件

vim etc/passwd

root:x:0:0::/root:/bin/bash         //改为0

vim etc/group

root:x:0:

openssl passwd -1 -salt $(openssl rand -hex 4)     //md5加密生成密码

生成的密码复制到 /etc/shadow 对应的位置中去

chmod 400 etc/shadow

sync

重启

 


添加ssh服务

cd /mnt/sysroot/

vim etc/issue             //系统启动时打印信息

Welcome to mini linux     //开机后显示信息

Kernel \r       //开机后显示版本号

cd

dropbear是轻量的sshd服务器

下载dropbear原文件

解压文件:tar xf dropbear-2013.58.tar.bz2

cd dropbear-2013.58.tar.bz2

./configure --help 先查看:编译不能启用 - -enable-pam意思基于pam做认证,因为busybox没有pam功能(- -enable显示默认禁用)

./configure     //编译安装

vim options.h   //使用里面默认值 不修改

make      //还可以写'make PROGRAMS='

make install

bash bincp.sh     //复制程序(命令)到指定目录下,同时将其所依赖的库文件复制到对应的目录:

dropbear

dropbearkey

dbclinet

quit

远程连接需要用到tty设备文件,每个终端都需要一个终端文件

cd /mnt/sysroot/

mdkir /dev/pts            //创建挂载目录

vim /etc/fstable          //pts挂载个伪文件系统

devpts      /dev/pts      devpts     mode=620      0     0     //新增此列,mode=620表示挂载文件系统内部他们对应的访问权限

 

为目标系统dropbear生成秘钥文件

mkdir /etc/dropbear

cd etc/dropbear

dropbearkey -t rsa -s 2048 -f dropbearkey_rsa_host_key    //生成秘钥文件   路劲名对应options.h配置文件里设置的路径和文件名

dropbearkey -t dss -f dropbearkey_dss_host_key               //生成秘钥文件    路劲名对应options.h配置文件里设置的路径和文件名

 

远程登录像ssh这种对安全选项比较严格,使用的sh不是安全是无法登录的

定义安全SH:

vim etc/shells

/bin/sh

/bin/ash

/bin/hush

/bin/bash

/sbin/nologin

sync

在用户登录时,dropbear需要将用户名转化为id号并检查用户账号信息。

添加网络转化服务功能模块

vim etc/nsswitch.conf

passwd: files

group: files

shadow: files

hosts: files dns    //先找files文件 在找DNS

复制关联模块到相应的目录下

cp -d /li64/libnss_files* li64/

mkdir usr/lib64

cp -d /usr/lib64/libnss3.so usr/lib64

cp -d /usr/lib64/libnssutil3.so usr/lib64

cp -d /usr/lib64/libnss_files* usr/lib64

sync

重启开机

注:开机前原有的用来编译的系统要关机,不然当你启动dropbear时会出故障的,因为会在当前系统创建文件

 

开机登录后:    命令提示符仍然显示:-bash-4.1# 编辑.bash_profile

vi .bash_profile

export PS1='[\u\@\h \w]\$'                                         //u用户  h主机

export PATH= $PATH:/usr/local/bin:/usr/local/sbin    //echo $PATH先查看有哪些路径

exit  退出重新登录此时上面定义的主机名则会显现出来

 

运行dropbear

mkdir /var/run                      //创建 dropbear.pid文件的目录

dropbear -F -E                    //开启dropbear,工作到前台.   (命令:killall dropbear则是停掉dropbear)

登录

netstart -tnl                         //查看是否已经运行开始监听了,此时可以远程控制访问了

vim /etc/profile                   //远程登录定义一个专用的全局的配置文件

[ $UID -eq 0 ] && export PATH=/bin:/sbin:/usr/bin:/usr/sbin          //UID是管理员才能运行后面配置

du -sh /      //查看根文件的大小

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值