linux系统是一个基于,基于qemu虚拟机做一个属于自己的linux系统

这篇文字的目的在于给初学者提供一个简单的linux kernel移植的方法,不需要特定的硬件平台,只要你有一台电脑即可掌握如何制作一个小的linux系统的整个过程,如果有错误请批评指正。qemu工具的安装方法这里不做介绍,如果网友需要的话可以留言。

第一步:制作属于自己的文件系统initrd

initial ramdisk是一个经过压缩的内存形文件系统,在系统启动时将这个文件系统作为root fs使用,内核会自动将其挂载并且执行busybox命令,切换到用户空间,可以说initrd是连接busybox和内核的一个桥梁。

在制作ramdisk之前,需要首先编译生成busybox,如下:

tar -jxvf busybox-1.21.1.tar.bz2

进入busybox编译目录

cd     busybox-1.21.1

make;make install

编译完成之后在_install目录下生成bin,sbin,usr目录,这些目录存放busybox相关的命令,一个基本的Linux文件系统还需要etc ,tmp,lib,root,sys,proc等目录,因此需要创建这几个目录,为了方便在_install目录下创建,执行mkdir -p etc proc tmp dev lib root sys,

系统启动时会首先调用/sbin/init,这个init会首先判断/etc目录下是否有inittab这个文件,如果有就执行inittab中的内容,没有就执行/etc/init.d/rcS,inittab的内容格式如下:

::sysinit:/etc/init.d/rcS

::askfirst:/bin/login

::restart:/sbin/init

其中rcS为可执行脚本,第二项askfirst需要passwd文件,存放用户名和密码,当使用reboot命令时会调用restart,rcS脚本的内容可自己定义,一般为挂载一些内存行文件系统proc sysfs ramfs等,也可以打开syslog,得到日志信息,如下所示:

#!/bin/ash

mount -t proc proc /proc

mount -t sysfs sys /sys

mount -t ramfs ramfs /tmp -o nosuid,nodev,mode=1777

/sbin/syslogd -C 125

/sbin/klogd

/sbin/mdev -s

echo "#########"

echo "initrd is running"

echo "#########"

这样一个基本的文件系统结构就搭建好了

退出etc目录,在_install目录下,使用命令行:

find . | cpio -o -H newc | gzip -c > ../rootfs.gz 生成一个rootfs的gz的压缩包。这样initrd就生成了

第二步:编译linux kernel 生成bzImage内核镜像文件,制作Linux系统

过程如下:

1,下载一个kernel,如linux-3.10.5

2, tar -xvf linux-3.10.5.tar

3,make menuconfig选择需要编译或者加载到内核的模块

4,make生成bzImage,和对应的ko文件,bzImage文件的路径为linux-3.10.5/arch/x86/boot/bzImage

调用qemu-system-i386  -nographic -kernel ./bzImage -initrd ./rootfs.gz -append "root=/dev/ram0 rdinit=/sbin/init noapic"即可,进入login界面后输入root admin即可进入linux系统中,可看到自己创建的目录和文件

第三步:实现linux系统和外界通信

为了让虚拟系统和外界通信,qemu提供了虚拟的网络设备,可以通过命令qemu-system-i386 -net nic,model=?显示支持的网络设备,然后使用命令参数-net nic,model=xxx指定。xxx必须要有相应的驱动支持,在编译内核时需要指定

命令如下:qemu-system-i386 -nographic -kernel ./bzImage -initrd ./rootfs.gz -append "root=/dev/ram0 rdinit=/sbin/init noapic console=ttyS0" -net nic,model=rtl8139 -net tap,ifname=tap0,script=no,downscript=no,启动之后

执行ifconfig eth0 up;ifconfig eth0 192.168.1.1 netmask 255.255.255.0即可实现以太通信

阅读(1023) | 评论(0) | 转发(0) |

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值