一、编译一个简单的linux步骤如下:

# yum groupinstall ""Development Tools" "Server Platform Development" -y    //安装开发包组
# tar xf linux-3.10.65.tar.xz  //下载内核这里就不介绍了
# cd /usr/src
# ln -sv linux-3.10.15 linux  
# cd linux # make help
# make allnoconfig
# make menuconfig
这里简单介绍下这次编译到的选项:
内核核心模块相关的:
[*]64-bit kernel  //内核编译成64位的
[*]enable loadable module support --> [*]Module uploading   //允许装卸载模块,这里都是编译进内核的,不借助ramdisk装载模块,先选中吧
Processor type and features ---> [*]Symmetric multi-processing support   //支持多处理器,linux上多处理器和多核心是一个意思
Processor family (Generic-x86-64) ---> (X) Generic-x86-64  //选通用的就可以
Bus options (PCI etc.) ---> [*] PCI support   //PCI相关的
Device Drivers ---> SCSI device support ----> [*]SCSI device support  //SCSI设备的支持
[*]SCSI disk support  //SCSI硬盘支持
[*] Fusion MPT device support ---> [*] Fusion MPT ScsiHost drivers for SPI  //lspci命令可以查看到本机pci的信息   
(*) Fusion MPT misc device (ioctl) drivers
文件系统相关的:
File systems  ---> <*> Second extended fs support    
<*> Ext3 journalling file system support
[*] Default to 'data=ordered' in ext3 (NEW)
[*] Ext3 extended attributes (NEW)
<*> The Extended 4 (ext4) filesystem Executable file formats / Emulations ---> [*] Kernel support for ELF binaries
[*] Write ELF core dumps with partial segments (NEW)
<*> Kernel support for scripts starting with #!

键盘鼠标usb相关的

Device Drivers  ---> Input device support  --->  [*]Keyboards  --->
[*] Mice --->
<*> Mouse interface
[*] USB support ---> <*> Support for Host-side USB
<*> xHCI HCD (USB 3.0) support
<*> EHCI HCD (USB 2.0) support
<*> OHCI HCD support
<*> UHCI HCD (most Intel and VIA) Support

udev相关的:

Device Drivers --> Generic Driver Options --> Mintain a devtmpfs filesystem to mount at /dev  //识别到的设备都挂载到/dev目录
                           [*]   Automount devtmpfs at /dev, after the kernel mounted the rootfs  
# make -j 4 bzImage //只编译内核文件
# fdisk /dev/sdb  //在现有系统上添加一块盘,分两个区,一个用来做boot,一个用来做根目录

# mke2fs -t ext4 /dev/sdb1
# mke2fs -t ext4 /dev/sdb2
# mkdir /mnt/{boot,sysroot}
# mkdir -pv etc dev proc sys bin usr/{lib,bin,sbin,lin64} lib64 lib/modules home var/{log,run,lock} tmp mnt media root   
# mount /dev/sdb1 /mnt/boot/
# mount /dev/sdb2 /mnt/sysroot
# grub-install --root-directory=/mnt /dev/sdb
# cd /usr/src/linux
# cp arch/x86/boot/bzImage /mnt/boot/bzImage
# file /mnt/boot/bzImage
# vim /mnt/boot/grub/grub.conf
    default=0
    timeout=5
    title Mini Linux (3.10.67)
    root (hd0,0)
    kernel /bzImage ro root=/dev/sda2 init=/bin/bash
写一个脚本bincp复制命令及依赖库到sysroot下
    #!/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
        libdir=$(dirname $lib)
        [ -d $target$libdir ] || mkdir -p $target$libdir
        [ -f $target$lib ] || cp $lib $target$lib
      done
    }     while [ "$command" != 'q' -a "$command" != 'quit' ]; do
      if !which $command &> /dev/null;then
        read -p "No such command,enter again:" command
        continue
      fi
      command=$(which --skip-alias $command)
      cmnddir=$(dirname $command)

       [ -d $target$cmnddir ] || mkdir -p $target$cmnddir
       [ -f $target$command ] || cp $command $target$command
        libcp $command
        read -p "Another command(quit):" command
      done

 

新建虚拟机Mini Linux使用上面的sdb硬盘
重启Mini Linux,可以在bash命令行进行一些命令的操作,比如cd,ls,mount等

也可以新建init程序让系统开机运行

新建脚本init: /mnt/sysroot/sbin/init
#!/bin/bash
#
echo -e "\twelcome to \033[32mMini\033[0m linux"
mount -n -t proc proc /proc
mount -n -t sysfs /sys
mount -n -o remount,rw /dev/sda2 /
/bin/bash
# chmod +x /mnt/sysroot/sbin/init

二、结合busybox+dropbear制作linux

静态编译busybox:

下载busybox:https://busybox.net/downloads/

# wget https://busybox.net/downloads/
# tar xf busybox-1.22.1.tar.bz2
# cd busybox-1.22.1
# yum install glibc-static //静态编译busybox依赖到的库
# make menuconfig  //配置下面两项,其他默认就可以了
    Busybox Settings ---> Build Options ---> [*] Build BusyBox as a static binary (no shared libs)   
    Installation Options ("make install" behavior) ---> What kind of applet links to install (as soft-links) ---> (X) as soft-links //安装完成后文件链接类型
                                    (./_install) BusyBox installation prefix (NEW) //安装完成在什么位置,默认当前编译路径下,默认就好
# make && make install  //安装busybox
# cd /mnt/sysroot
# rm -rf ./* //删掉之前在sysroot中创建的目录,busybox会自动创建
# cd busybox-1.22.1  
# tree _install  //可以看一下busybox安装后生成了哪些文件
# cp -a _install/* /mnt/sysroot/  //复制_install中所有文件到sysroot中
# cd /mnt/sysroot
# rm linuxrc  //删掉busybox模拟的init程序,"ls /sbin | grep init"中的init就够用了 
修改grub配置文件:
default=0
timeout=3
title Mini Linux (3.10.67)
root (hd0,0)
kernel /bzImage ro root=/dev/sda2 init=/sbin/init  //修改init就好
# mkdir -pv etc lib lib64 proc sys dev root home boot mnt media tmp var  //在sysroot下创建其他缺少的目录

busybox默认模拟的是CentOS5的init程序,它会去读取inittab文件,所以我们创建一个/sysroot/etc/inittab,内容如下:

# vim /sysroot/etc/inittab
  ::sysinit:/etc/rc.d/rc.sysinit  //完成系统初始化
tty1::askfirst:/bin/sh        //启动几个终端
tty2::askfirst:/bin/sh
tty3::askfirst:/bin/sh
tty4::askfirst:/bin/sh
  ::ctrlaltdel:/sbin/reboot  //ctrl+alt+del组合键就重启
  ::shutdown:/bin/umount -a -r  //关机前卸载所有文件系统

接下来创建初始化脚本:/sysroot/etc/rc.d/rc.sysinit

  #!/bin/sh
  #
  echo -e "\tWelcome to \033[32mMini\033[0m Linux"
  mount -t proc porc /proc    //如果不能挂载,换成绝对路径
  mount -t sysfs sysfs /sys  

  echo "scan /sys and to populatte to /dev..."
  mdev -s            //系统启动时自动输出所有文件到/dev目录下

  mount -o remount,rw /dev/sda2 /

  echo "mouting all filesystems.."
  mount -a          //挂载剩余的所有文件系统

# chmod +x etc/rc.d/rc.sysinit 

 将网络相关功能编译进内核:

# cd /usr/src/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 (NEW) --->[*] Intel devices (NEW)
                                                         <*> Intel(R) PRO/1000 Gigabit Ethernet support

# make  bzImage
# cp arch/x86/boot/bzImage /mnt/boot

重启Mini Linux测试网络功能

# ifconfig -a    //查看网卡
# ifconfig eth0 192.168.2.20 up
# ifconfig lo 127.0.0.1 up
# ping 192.168.2.1  

 假设把上面的网络功能编译为模块

Device Drivers --->[*] Network device support ---> [*] Ethernet driver support (NEW) --->  <M> Intel(R) PRO/1000 Gigabit Ethernet support 
# cp arch/x86/boot/bzImage /mnt/boot
# sync  

编译网卡e1000,将.ko文件复制到/mnt/sysroot/lib/modules下

# cd /usr/src/linux
# make M=drivers/net/ethernet/intel/e1000
# mkdir /mnt/sysroot/lib/modules -pv
# cp drivers/net/ethernet/intel/e1000/e1000.ko /mnt/sysroot/lib/modules/

重启Mini Linux,装载进e1000网卡模块

# insmod /lib/modules/e1000.ko

设置系统初始化的时候加载网卡模块,并初始化

# vim /etc/rc.d/rc.sysinit
    echo "Load driver for e1000..."
    insmod /lib/modules/e1000.ko     echo "Initializing ethernet card..."
    ifconfig eth0 192.168.2.20 up
    ifconfig lo 127.0.0.1 up     [ -f /etc/sysconfig/network ] && . /etc/sysconfig/network
    [ -z "$HOSTNAME" -o "$HOSTNAME" == '(none)' ] && HOSTNAME='lcoalhost'
     hostname $HOSTNAME 

设置主机名

# mkdir etc/sysconfig
# vim etc/sysconfig/network
    HOSTNAME=mini.alen.com

给Mini Linux添加账号和密码

# vim etc/passwd
  root:x:0:0::/root:/bin/bash
# vim etc/group
  root:x:0:
# vim etc/shadow
或者直接追加宿主机上的:# head -1 /etc/shadow > etc/shadow
# chmod 400 etc/shadow

sha密码可能不支持,换成md5的吧

# openssl passwd -1 -salt $(openssl rand -hex 4)

添加模拟终端:

修改etc/initab文件:

# vim etc/insttab

    ::sysinit:/etc/rc.d/rc.sysinit
    ::respawn:/sbin/getty 9600 tty1  //修改这几个模拟终端,getty开机时会自动调用login程序
    ::respawn:/sbin/getty 9600 tty2  //
    ::respawn:/sbin/getty 9600 tty3  //
    ::ctrlaltdel:/sbin/reboot
    ::shutdown:/bin/umount -a -r

添加issue文件,修改终端显示信息

# vim etc/issue
Welcome to alen Linux
Kernel \r

添加ssh服务

下载dropbear源码:https://matt.ucc.asn.au/dropbear/releases/dropbear-2019.78.tar.bz2

默认编译安装就可以了

复制dropbear命令到sysroot下

# bash bincp.sh
dropbear,dropbearkey,dbclient  //添加这几个就可以了

添加存放远程终端文件的目录dev/pts

# mkdir dev/pts
# vim etc/fstab
devpts /dev/pts devpts mode=620 0 0   //挂载pts

为dropbear生成密钥文件

# mkdir etc/dropbear
# cd etc/dropbear
# dropbearkey -t rsa -s 2048 -f dropbear_rsa_host_key
# dropbearkey -t dss -f dropbear_dss_host_key

添加安全shell

# vim etc/shells
    比如:
/bin/sh
/bin/ash
/bin/hush
/bin/bash
/sbin/nologin

添加nsswitch服务:网络服务转换

# vim etc/nsswitch.conf
  passwd: files
  group: files
  shadow: files
  hosts: files dns

复制nsswitch的库文件到sysroot下

# mkdir usr/lib64
# cp -d /lib64/libnss_files* 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/

重启Mini Linux,测试

# vim .bash_profile
设置PS1环境变量
  export PS1='[\u@\h \w]\$'
  export PATH=$PATH:/usr/local/bin:/usr/local/sbin  
添加dropbear的pid存放路径
# mkdir /var/run
# dropbear -F -E  //让dropbear工作于前台
# mkdir /dev/pts
# mount -t devpts devpts /dev/pts
# vi /etc/profile
[ $UID -eq 0 ] && export PATH=/bin:/sbin:/usr/bin:/usr/sbin

至此,一个迷你型的linux就编译好了








linux基础之Mini Linux制作的更多相关文章

  1. SLAM+语音机器人DIY系列:(一)Linux基础——2.安装Linux发行版ubuntu系统

    摘要 由于机器人SLAM.自动导航.语音交互这一系列算法都在机器人操作系统ROS中有很好的支持,所以后续的章节中都会使用ROS来组织构建代码:而ROS又是安装在Linux发行版ubuntu系统之上的, ...

  2. Linux基础笔记—— 走进Linux

    走进Linux 操作系统 操作系统是计算机中必不可少的基础系统软件,他的作用是管理和控制计算机系统中的硬件和软件资源,合理有效的组织系统的工作流程,在计算机系统(硬件)与使用者之间提供接口作用. 操作 ...

  3. 【Linux基础总结】Linux基本环境

    Linux基本环境 对Linux的基础认识 虚拟机进入终端: [root@hadoop-senior Desktop] # 用户名 主机名 所在目录名称 #:表示当前用户属于root用户,超级管理员用 ...

  4. Linux基础一:Linux的安装及相关配置

    1. 计算机操作系统简介    1) 操作系统的定义:操作系统是一个用来协调.管理和控制计算机硬件和软件资源的系统程序,它位于硬件和应用程序之间.    2) 操作系统的内核的定义:操作系统的内核是一 ...

  5. 『Linux基础 - 4 』linux常用命令(1)

    这篇笔记包含以下知识点: 几个概念的理解:Linux命令,控制台,终端, 终端提示符 对文件目录的操作的相关命令: 切换目录,列出目录下的文件等 对文件的操作的相关命令: 创建,删除,复制,修改,移动 ...

  6. 『学了就忘』Linux基础 — 16、Linux系统与Windows系统的不同

    目录 1.Linux严格区分大小写 2.Linux一切皆文件 3.Linux不靠扩展名区分文件类型 4.Linux中所有的存储设备都必须在挂载之后才能使用 5.Windows下的程序不能直接在Linu ...

  7. Linux基础:认识Linux

    1.Linux操作系统的特点 优点 ​ (1)可靠性高:linux是基于Unix的概念开发出来的系统,拥有Unix的稳定且效率的特点.运行一年以上而不曾宕机.不必关机是很平常的事情 : ​ (2)彻底 ...

  8. linux基础-附件1 linux系统启动流程

    附件1 linux系统启动流程 最初始阶段当我们打开计算机电源,计算机会自动从主板的BIOS(Basic Input/Output System)读取其中所存储的程序.这一程序通常知道一些直接连接在主 ...

  9. 【Linux基础】常用Linux命令: cd, cp, ls, mkdir, mv, rm, su, uname

    常用Linux命令:cd, cp, ls, mkdir, mv, rm, su, uname cd命令:切换当前工作目录至 dirName(目录参数) 其中 dirName 可为绝对路径或相对路径.若 ...

随机推荐

  1. 请转发!简单2分钟制作无接触式小区进出微信登记表!全免费!数据安全!所有数据均存在创建人登录的QQ腾讯文档里!

    全免费!数据安全!所有数据均存在创建人登录的QQ腾讯文档里! 阻击疫情到了最吃劲的关键期,大家能不出门就不出门,但免不了出去买个菜.取个快递啥的,每次出入的时候,社区同志都在认真拿着笔记录每个进出信息 ...

  2. HDU 6599 I Love Palindrome String (回文树+hash)

    题意 找如下子串的个数: (l,r)是回文串,并且(l,(l+r)/2)也是回文串 思路 本来写了个回文树+dfs+hash,由于用了map所以T了 后来发现既然该子串和该子串的前半部分都是回文串,所 ...

  3. HDU 6562 lovers 2018CCPC吉林H(线段树)

    题意: 初始n个空串,m个操作: 1.给[l,r]的所有字符串头尾加一个‘d’,将原字符串x变为dxd 2.求[l,r]所有字符串代表的数字之和mod 1e9+7 思路: 据说是硬核线段树.. 对于线 ...

  4. num05---装饰模式

    当系统需要新的功能的时候,一般都是向旧的类中添加新的代码.比如一个人这个类,需要新增穿衣的功能,那么就会在人这个类中去添加对应的穿衣方法代码,用来增强人这个类的行为功能.但是这样做,会因为新加入的字段 ...

  5. javascript get set读取器

    class Person{ constructor(name, id){ let _name = name, _id = id; Object.defineProperties(this, { nam ...

  6. 01 web api接口

    WEB API接口 接口介绍 接口概念:前台与后台进行信息交互的媒介 - url连接 https://api.map.baidu.com/place/v2/search 接口组成: url链接 - 长 ...

  7. xmake v2.3.1 发布, 无缝对接其他构建系统

    最近对xmake内部做了不少的重构来改进,并且新增了不少实用的新特性,欢迎来体验. 项目源码 官方文档 一些新特性: 一键编译其他构建系统维护的项目,实现无缝对接,并且支持交叉编译(比如autotoo ...

  8. implements Serializable有什么作用?

    没有implements Serializable,你就不能通过rmi(包括ejb)提供远程调用.serialization 允许你将实现了Serializable接口的对象转换为字节序列,这些字节序 ...

  9. StarUML之六、StarUML规则与快捷键

    本章内容参考官网即可,不做详细说明,实践出真知! starUMl规则主要是在模型设计的约束条件 https://docs.staruml.io/user-guide/validation-rules ...

  10. VUE中使用XLSX实现导出excel表格

    简介 项目中经常会用导出数据的场景,这里介绍 VUE 中如何使用插件 xlsx 导出数据 安装 ## 1.使用 npm 或 yarn 安装依赖(三个依赖) npm install -S file-sa ...