linux小型内核编,20-3.自制小型LINUX系统,内核编译,busybox介绍-颤沙的博客

创建一级目录mkdir /mnt/sysrootmount /dev/sdb2 /mnt/sysrootmkdir –pv /mnt/sysroot/{etc,lib,lib64,bin,sbin,tmp,var,usr,sys,proc,opt,home,root,boot,dev,mnt,media} 复制bash和相关库文件(利用编写的cpcmd脚本) 复制相关命令及相关库文件如:ifconfig,insmod,ping,mount,ls,cat,df,lsblk,blkid等 注意复制的时候也是要创建一个文件夹,然后把将来要作为根分区的分区(sdb2)挂载上去,然后把cpcmd脚本中的目标目录改为此文件夹,进行拷贝即可。 当然最好还是用busybox。 注意点 还是用yum安装内核的方式比较好,因为它会把所有的模块也给安装上,这样的话网络功能也能够启用,只需要进入bash shell之后把网络驱动给载入即可(可以尝试下用init启动)。 insmod e1000.ko 命令来加载模块,注意要提前拷贝这个模块。 如果想要开机之后能把除了根之外的boot分区挂载上(包括其他分区),以及启动网络功能进行各种初始化操作。可以直接在grub.conf中的init=/bin/bash中自己写一个bash脚本,然后添加上各种初始化设置,让init指向它即可(当然也要把原本的bash给添加到这个脚本里面,就相当于再原来的bash脚本基础上增添一些操作) 内核编译

单内核体系设计、但充分借鉴了微内核设计体系的优点,为内核引入模块化机制 内核组成部分:kernel:内核核心,一般为bzImage,通常在/boot目录下名称为 vmlinuz-VERSION-RELEASEkernel object:内核对象,一般放置于/lib/modules/VERSION-RELEASE/[ ]: N :代表不启用此功能[M]: M :启用此功能但是会把模块放在lib/modules中[*]: Y :启用功能并将模块放在vmlinuz中 辅助文件:ramdiskinitrdinitramfs 前提:

(1) 准备好开发环境(2) 获取目标主机上硬件设备的相关信息(3) 获取目标主机系统功能的相关信息例如:需要启用相应的文件系统(4) 获取内核源代码包www.kernel.org 开发环境准备 包组Development Tools 目标主机硬件设备相关信息CPU:cat /proc/cpuinfox86info -alscpu 硬件设备 PCI设备:lspci-v-vvlsusb-v-vvlsblk 块设备 了解全部硬件设备信息hal-device:CentOS 6 安装系统

安装开发包组下载源码文件.config:准备文本配置文件make menuconfig:配置内核选项make [-j #]make modules_install:安装模块make install :安装内核相关文件安装bzImage为/boot/vmlinuz-VERSION-RELEASE生成initramfs文件编辑grub的配置文件 编译内核示例

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

cd /usr/src

#n -sv linux-4.20.2 linux

cd /usr/src/linux-VERSION

cp /boot/config-$(uname -r) ./.config

make help

make menuconfig :需要安装一些包才能执行此命令

make -j 2

make modules_install

make install

reboot 编译内核

配置内核选项支持“更新”模式进行配置:make help(a) make config:基于命令行以遍历的方式配置内核中可配置的每个选项(b) make menuconfig:基于curses的文本窗口界面(c) make gconfig:基于GTK (GNOME)环境窗口界面(d) make xconfig:基于QT(KDE)环境的窗口界面支持“全新配置”模式进行配置(a) make defconfig:基于内核为目标平台提供的“默认”配置进行配置(b) make allyesconfig: 所有选项均回答为“yes“(c) make allnoconfig: 所有选项均回答为“no“ 编译全编译:make [-j #]编译内核的一部分功能:(a) 只编译某子目录中的相关代码cd /usr/src/linuxmake dir/(b) 只编译一个特定的模块cd /usr/src/linuxmake dir/file.ko示例:只为e1000编译驱动:make drivers/net/ethernet/intel/e1000/e1000.ko 如何交叉编译内核:

编译的目标平台与当前平台不相同make ARCH=arch_name 要获取特定目标平台的使用帮助make ARCH=arch_name help示例:make ARCH=arm help 在已经执行过编译操作的内核源码树做重新编译

需要事先清理操作:make clean:清理大多数编译生成的文件,但会保留config文件等make mrproper: 清理所有编译生成的文件、 config及某些备份文件make distclean:mrproper、清理patches以及编辑器备份文件 卸载内核

删除/lib/modules/目录下不需要的内核(对应内核的module)库文件(删除/usr/src/linux/目录下不需要的内核源码:根据自己装的源码位置来删除)删除/boot目录下启动的内核和内核映像文件更改grub的配置文件,删除不需要的内核启动列表(6中手写title的项目删除,而7中在完成了前面步骤之后直接grub2-mkconfig重新生成就会自动删除掉去掉的内核项) 注意点: 内核因为配置项太多,因此用菜单模式来选择。我们可以参考已有的文本配置文件来生成菜单并进行修改。 这个已有的文本配置文件就是在已经编译安装好的linux内核中boot文件夹中的config_VERSION文件 其中y代表打入内核,m代表模块中,not set并注释就代表没有启动此功能。 将此已经存在的配置文件拷贝并命名为.config作为参考来执行下一步的make menuconfig 自己编译内核可将NTFS文件系统功能给启用,修改的时候用菜单方式修改(需要利用1中说的参考的文本配置文件,不然项目太多一个一个改也麻烦也不现实) 安装时分为安装模块和安装内核两步。 一个linux系统中可以同时装多个内核,因此直接编译安装新内核即可。 之前做过rpm安装内核包的实验,boot中会出现两个内核文件和相对应的initramfs.img,以及lib/modules中也会出现两个内核版本文件夹。 开机的时候选择载入哪个内核即可,(如果是手动添加的内核,当然这需要修改grub.conf中的设置,新加一个title即可。用命令make modules_install和make install命令添加的自动就会添加到grub.conf(或grub.cfg)文件中) make menuconfig需要安装一些依赖的包才能执行,根据提示一个一个装 基于最小化的安装包环境(装包组的话太多了)

yum install gcc gcc-c++ glibc glibc-devel pcre pcre-devel

openssl openssl-devel systemd-devel zlib-devel vim lrzsz tree screen lsof tcpdump wget ntpdate net-tools iotop bc zip unzip nfs-utils

menu通用设置中的local version可以自己书写一下,其中写的就是内核中前面主版本号后面写的内容。注意最开头处加上横杠-比较好,比如-myversion-1.0. 修改需要修改的项目比如NTFS之后保存,然后就会修改掉.config文件。之后便会根据它进行编译。可以查看一下它是否确实修改了。 之后make -j N && echo -e "\a"进行编译 即可(最好session或者nohup).如果报错需要某些文件包则先装好,然后再尝试。 如果只为了NTFS,NTFS文件格式的支持在epel源中有包可以进行操作。会多一个mount.ntfs命令,对NTFS格式文件系统的分区进行挂载之后便可可读可写。 Busybox

定制小型的Linux操作系统:linux内核+busybox(安卓手机就是类似如此)官方网站:https://busybox.net/busybox命令可能选项比较少,不过也基本够用。同时它还集成了库文件,不用再另外安装拷贝了。 Busybox使用

busybox 的编译过程与Linux内核的编译类似busybox的使用有三种方式: busybox后直接跟命令,如 busybox ls 直接将busybox重命名,如 cp busybox tar 创建符号链接,如 ln -s busybox rm busybox的安装

以上方法中,第三种方法最方便,但为busybox中每个命令都创建一个软链接,相当费事,busybox提供自动方法:busybox编译成功后,执行make install,则会产生一个_install目录,其中包含了busybox及每个命令的软链接 编译Busybox

yum install gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel zlib-devel libmcrypt-devel glibc-static ncurses-devel

wget https://busybox.net/downloads/busybox-1.30.0.tar.bz2

tar xvf busybox-1.30.0.tar.bz2

cd busybox-1.30.0/

make menuconfig 注意,在menu中按下面选择,把busybox编译成静态二进制、不用共享库,这样的话这些二进制文件所需要的库文件就会被打包集成在busybox中了而不是在当前操作系统的lib中 busybox本身就是一个程序,只不过功能众多而已,被视为多个程序的组合。实质上就是一个程序,要理解静态编译在这里的作用) 此时直接拷贝在其它机器上这个busybox也能执行了:Busybox Settings -->Build Options -->[*] Build BusyBox as a static binary (no shared libs)然后继续下面命令

make :只生成二进制文件不生成软链接

make install :把软链接也生成,以后执行命令就方便了

- 如果出错,执行make clean后,重新执行上面命令

mkdir /mnt/sysroot/

cp -a _install/* /mnt/sysroot/ :真正的busybox就在_install/bin/busybox 其他的在此目录内的命令都是软链接

Busybox也可直接下载编译好的二进制,在官网上有。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值