linux系统搭建(二)--busybox搭建小型linux

前提:

1、一个作为宿主机的Linux(Redhat Enterprise Linux 5.9);

2、宿主机上提供一块额外的硬盘作为新系统的存储盘(IDE接口);

3、Linux内核源码(linux-2.6.18)和busybox源码(busybox-1.20.2)。

4、VMware平台:VMware Workstation 12 Pro


一、硬盘分区和挂载

1、硬盘分区情况
2、硬盘在宿主机上的挂载
# mount /dev/hda1 /mnt/boot# mount /dev/hda2 /mnt/sysroot

二、编译busybox

# cd /usr/src# tar -jxvf busybox-1.20.2.tar.bz2# cd  busybox-1.20.2

在执行make menuconfig之前,将linux-2.6.38.5中include/mtd/ubi-user.h复制到busybox源码include/mtd/下(busybox-1.20.2中缺少这个头文件)

# mkdir include/mtd # cp /usr/src/linux/include/mtd/ubi-user.h include/mtd/# make menuconfig

说明:

1、此处需要选择 Busybox Settings --> Build Options -->  Build BusyBox as a static binary (no shared libs),这样可以把Busybox编译成一个不使用共享库的静态二进制文件,从而避免了对宿主机的共享库产生依赖;但你也可以不选择此项,而完成编译后把其依赖的共享库复制至目标系统上的/lib目录中即可。(这里采用前一种办法)

2、修改安装位置为/mnt/sysroot;方法为:Busybox Settings --> Installation Options --> (./_install) BusyBox installation prefix,修改其值为/mnt/sysroot。(本文未做此修改)

# make install

编译完成后在busybox的文件夹下会生成_instal,将其复制到/tmp下制作initrd

# mkdir -pv /tmp/busybox# cp -a /mnt/sysroot/* /tmp/busybox

三、制作initrd

# cd /tmp/busybox# rm linuxrc
1、建立rootfs
# mkdir -pv proc sys etc/init.d lib/modules dev mnt/sysroot
2、创建两个必要的设备文件:
# mknod dev/console c 5 1# mknod dev/null c 1 3
3、此版本的RHEL内核默认不能识别ext3文件系统格式,因此,要添加ext3依赖的库文件。
# cp /lib/modules/2.6.18-348.el5/kernel/fs/ext3/ext3.ko lib/modules/
# cp /lib/modules/2.6.18-348.el5/kernel/fs/jbd/jbd.ko lib/modules/
4、为initrd制作init程序,此程序的主要任务是实现rootfs的切换,因此,可以以脚本的方式来实现
# vim  init

添加如下内容:

#!/bin/sh
mount -t proc proc /proc
mount -t sysfs sysfs /sys
# insert modules
insmod /lib/modules/jbd.ko
insmod /lib/modules/ext3.ko
# mdev -s is to be run during boot to scan /sys and populate /dev
mdev -s
mount -t ext3 /dev/hda2 /mnt/sysroot
# switch root filesystem
exec switch_root /mnt/sysroot /sbin/init

给此脚本执行权限:

chmod  +x  init
5、制作initrd
# find  .  | cpio -H newc  --quiet -o  | gzip  -9 > /mnt/boot/initrd.gz

说明:

在这里没有编译kernel,直接复制了宿主机的vmlinuz

#cp /boot/vmlinuz-2.6.18-348.el5 /mnt/boot/vmlinuz

四、建立真正的根文件系统

# cd  /mnt/sysroot
1、建立rootfs
# mkdir -pv proc sys lib/modules mnt media etc/rc.d/init.d tmp dev/pts boot root var/{log,run,lock/subsys} usr/lib
2、创建两个必要的设备文件:
# mknod dev/console c 5 1# mknod dev/null c 1 3
3、建立系统初始化脚本文件
# vim etc/rc.d/rc.sysinit

添加如下内容:

#!/bin/shecho -e "\tWelcome to \e[31mlite\e[0m Linux" 
echo -e "Remounting the root filesystem ..."
mount -t proc proc /proc
mount -t sysfs sysfs /sys
mount -o remount,rw /  
echo -e "Creating the files of device ..."
mdev -s  
echo -e "Mounting the filesystem ..."
mount -a
swapon -a

让此脚本具有执行权限:

# chmod +x etc/init.d/rc.sysinit
4、配置init及其所需要inittab文件(init进程配置文件):
# vim etc/inittab

添加如下内容:

::sysinit:/etc/rc.d/rc.sysinit
console::respawn:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
5、为系统准备一个“文件系统表”配置文件/etc/fstab
# vim  etc/fstab

添加如下内容:

sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
/dev/hda1               /boot                   ext3    defaults        0 0
/dev/hda2               /                       ext3    defaults        1 1

至此一个简易的基于内存运行的小系统已经构建出来了,我们接下来为此系统创建所需的引导程序。


五、grub引导程序

# grub-install --root-directory=/mnt  /dev/hda

说明:此处的/dev/hda为目标系统所在的那块新磁盘;

接下来为grub建立配置文件:

# vim  /mnt/boot/grub/grub.conf

添加类似如下内容:

default=0
timeout=3
color light-green/black light-magenta/black
title Lite Linux (2.6.18)    
    root (hd0,0)    
    kernel /vmlinuz ro root=/dev/hda2 quiet    
    initrd /initrd.gz

最后,在虚拟机上测试即可。

本文大部分参考了马哥的资料和网上的内容。

时间: 2024-10-11 11:51:02

linux系统搭建(二)--busybox搭建小型linux的相关文章

【课程分享】深入浅出嵌入式linux系统移植开发 (环境搭建、uboot的移植、嵌入式内核的配置与编译)

深入浅出嵌入式linux系统移植开发 (环境搭建.uboot的移植.嵌入式内核的配置与编译) 亲爱的网友,我这里有套课程想和大家分享,如果对这个课程有兴趣的,可以加我的QQ2059055336和我联系. 课程内容简介 本课程重点是给大家讲解嵌入式linux系统移植的开发方法,采用理论与实践,硬件与软件相结合的方法. 1.在每节开始之前先简单回顾上一节所讲的主要内容,并对本节所讲的内容先进行概述,讲解概念.技术要点,设计实现思路等内容,最后总结本次课程的要掌握的要点. 2.在讲课的过程中对关键技术

手把手带你自制Linux系统之二 简易Linux制作

手把手带你自制Linux系统之二 简易Linux制作 本文利用CentOS5.5自带内核制作一个Mini Linux. 打开准备工作中创建的CentOS,为另一个虚拟机MiniLinux添加一个最小Linux所需要的文件. 1. 创建分区 为准备好的磁盘创建两个主分区,大小分别为20M和512M. 使用fdisk命令创建分区详细过程: fdisk /dev/hda 创建第一个20M分区依次输入: n --> p --> 1 --> <Enter> --> +20M 这几

Linux基础回顾(2)——Linux系统分区二三事

问题来自Linux教材,答案自我整理难免会有不足之处.这是我Linux期末的总结 1. 一块硬盘上可以有几种类型的分区?各自可以有多少个?(各个分区能安装操作系统吗?) 硬盘分区有三种类型的分区:主分区,扩展分区,逻辑分区:一个硬盘最多能划分4个主分区,或者3个主分区加上一个扩展分区,扩展分区上可以划分多个逻辑分区(最多20个).能安装操作系统. 2.用户能否在安装过程中创建扩展分区呢? 分区工具在文件系统类型中没有提供扩展(extended)分区类型,即用户不能根据需要不能手工创建扩展分区.安

如何增强 Linux 系统的安全性,第一部分: Linux 安全模块(LSM)简介

http://www.ibm.com/developerworks/cn/linux/l-lsm/part1/ 1.相关背景介绍:为什么和是什么 近年来Linux系统由于其出色的性能和稳定性,开放源代码特性带来的灵活性和可扩展性,以及较低廉的成本,而受到计算机工业界的广泛关注和应用.但在安全性方面,Linux内核只提供了经典的UNIX自主访问控制(root用户,用户ID,模式位安全机制),以及部分的支持了POSIX.1e标准草案中的capabilities安全机制,这对于Linux系统的安全性是

Linux系统添加虚拟IP(Suse linux为例)

之前有提到Windows服务器添加多个虚拟IP的方法,只需要用图形化界面就可以了,但是Linux服务器就没那么简单.所以总结了这么一篇教程,记录一下如何在Linux服务器上添加虚拟IP. 1)以Root权限登录,或者登陆以后su - 获取root权限. 2)跳转到Network设置的位置: cd /etc/sysconfig/network-scripts 3)查看一下现有的网络适配器有哪些: ls ifcfg-eth* 可以看到一个或一些类似于: ifcfg-eth-id-12:34:56:7

(一)Linux系统移植之环境搭建

Linux系统移植 环境搭建 交叉编译工具链:为了编译.链接.处理和调试跨平台体系结构的程序代码.配置的步骤: 解压到/usr/local/arm目录下,执行命令"tar -xvf arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 -C /usr/local/arm" 配置系统环境变量,把解压的交叉编译工具链的路径添加到环境变量PATH中,在~/.bashrc中添加一行" export PATH=$

Linux系统Go开发环境搭建

Go 语言是由谷歌的科学家开发的,并开源的新语言,被誉为"21世纪的C语言",它的主要目标是将静态语言的安全性和高效性与动态语言的易开发性进行有机结合,达到完美平衡,从而使编程变得更加有乐趣,而不是在艰难抉择中痛苦前行. 最近有一个项目是处理瞬间高并发的请求,考虑到Go语言的原生支持并发的特性,以及新年之后多个项目用Go语言开发,项目组决定用Go语言开发前端抗洪服务器.工欲善其事,必先利其器,下面贴出Linux系统下Go开发环境的搭建. 网上有很多关于Go环境搭建的资料,都是先从安装m

linux系统Samba服务器的搭建与配置

一.Samba概述 1.概述 Samba是在Linux和Unix系统上实现SMB协议的一个免费软件,有服务器及客户端程序构成.SMB是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务.SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统.打印机及其他资源.通过设置"NETBIOS over TCP/IP"使得Samba不但能与局域网主机分享资源,还能与全世界的电脑分享资源. 2.协议 SMB(Serv

用习惯了windows系统要怎样去认识linux系统(二)

三.配置双网卡绑定(负载均衡)     我们把系统安装完成后,我们可以show一下网络下网卡的连接情况,我们在下图可以看到有两个网卡处于连接状态.然后再创建一个叫Team1的负载均衡的网卡,把eno16777736和eno33554960两个网卡分别加入到Team1中.再给Team1添加ip地址,网关,DNS信息.    使用下图的命令成功激活Team1网卡    我们这就可以使用xshell工具ssh连接上redhat系统 配置完成Team1网卡后,因为担心网络中有非法的DHCP服务器去分配I

闲话Linux系统安全(二)——强制访问控制(MAC)

安全秘笈第二式--不安全的特殊权限和强制访问控制(MAC) 在DAC的机制中,不管是所有权加权限的管理办法,还是文件系统访问控制列表(facl),都是非常强大的访问控制机制,均可以对文件资源进行比较有效的访问控制.但DAC的自主性太强,可以说文件资源的安全在很大的程度上取决于使用者个人的意志,因此这种安全似乎就被主观化了.尤其是对于root用户而言,不管是权限和所有权的限制,还是facl的管理控制,都仅仅能够限制root的误操作而已. 在CentOS或RHEL系统中,每一个服务都需要以守护进程的