作者:哈尔滨师范大学  计算机学院

2013级 学生 刘聘婷

环境和工具:

编译环境: Ubuntu 15.04

工具:Buildroot-2015.08.1

(http://buildroot.uclibc.org/)

Qemu

源码:

引导程序:grub-0.97-i386-pc.tar.gz

文件系统: busybox-1.23.2

虚拟机: virtual box

一、使用buildroot制作编译工具链

buildroot

会自动通过网络下载相关的源码,因此整个编译过程需要保持网络畅通。它可以编译出自己的 gcc 和 C 库 ,Buildroot 会在它源码的根目录下默认建立一个名为 dl 的文件夹放置所需要的源码。

1、解压buildroot压缩包

tar –jxvf buildroot-2015.08.1.tar.bz2

2)进入解压后的buildroot根目录

make

menuconfig出现如下图:

这里根据自己需要的内核版本、uclibc 和 gdb 的版本进行配置。

3)make进行编译,这个过程需要时间比较多大约1个小时左右。

4)在

buildroot 的目录中buildroot-2015.08.1/output/host/usr下放着就是我们编译出来自己用的

gcc ,把整个 usr 下的东西都拷贝到 /opt/i586-linux-gcc 这个下面

cp –r buildroot-2015.08.1/output/host/usr/*

/opt/i586-linux-gcc

添加/opt/i586-linux-gcc/bin 到环境变量

export

PATH=/opt/i586-linux-gcc/bin:$PATH

echo $PATH查看是否添加成功

二、编译内核:

把 buildroot 的 dl 下的 Linux 内核源码拷贝到创建的目录mylinux

1)解压

xz –d linux-4.1.4.tar.xz

生成一个linux-4.1.4.tar的压缩文件再进行解压

tar –zvf linux-4.1.4.tar

2)make i386_defconfig

3)接入输入

make

menuconfig,修改文件系统配置

4)修改

Linux 源码最顶层 Makefile

三、编译

Busybox

1)解压

tar

–jvf busybox-1.23.2.tar.bz2

2)make defconfig

3)修改

Busybox 源码根目录下的 Makefile 文件

4)在

Busybox 源码根目录下输入 make menuconfig选择静态编译

Build

Options ——>Build BusyBox as a static binary (no shared

libs)

5)接着输入

make && make install

四、制作启动软盘

制作启动软盘

1)新建一个软盘镜像initrd4M.img

dd if=/dev/zero of=initrd4M.img bs=512

count=2880

2)将

grub 写入软盘的引导扇区中去

解压 grub-0.97-i386-pc.tar.gz

losetup /dev/loop0 initrd4M.img

dd if=/grub/grub-0.97-i386-pc/boot/grub/stage1

of=/dev/loop0 bs=512 count=1

dd if=/grub/grub-0.97-i386-pc/boot/grub/stage2

of=/dev/loop0 bs=512 seek=1

losetup -d /dev/loop0

3)下载安装qemu进行测试

apt-get install qemu

安装 qemu 成功后,输入:

qemu -fda initrd4M.img 出现下图代表成功

接着建立磁盘映像:

第一步:创建一个磁盘镜像文件

dd if=/dev/zero of=mylinux.img bs=4096

count=8192

第二步:给磁盘映像分区

fdisk -C 16065 -H 255 -S 63 mylinux.img

hda_32M.img的磁头数为255、磁道数为16065、扇区数为63,同时给磁盘分区。

第三步:格式化分区

losetup -o 1048576 /dev/loop0

mylinux.img

mkfs.ext3 -m 0 /dev/loop0

建立临时挂载目录 rootfs,挂载硬盘镜像文件

mkdir rootfs

sudo mount /dev/loop0 rootfs/

制作文件系统

进入rootfs

root@cheer:/mylinux/rootfs# mkdir boot

root@cheer:/mylinux/rootfs# cd boot/

root@cheer:/mylinux/rootfs/boot# cp

/mylinux/linux-4.1.4/arch/i386/boot/bzImage

/mylinux/rootfs/boot/

root@cheer:/mylinux/rootfs/boot# ls

bzImage

root@cheer:/mylinux/rootfs/boot# mkdir

grub

root@cheer:/mylinux/rootfs/boot# ls

bzImage grub

root@cheer:/mylinux/rootfs/boot# cp -r

/grub/grub-0.97-i386-pc/boot/grub/* ./grub/ -af

root@cheer:/mylinux/rootfs/boot# ls

bzImage grub

root@cheer:/mylinux/rootfs/boot# cd

grub/

root@cheer:/mylinux/rootfs/boot/grub#

ls

e2fs_stage1_5 iso9660_stage1_5 reiserfs_stage1_5 ufs2_stage1_5

fat_stage1_5 jfs_stage1_5 stage1 vstafs_stage1_5

ffs_stage1_5

minix_stage1_5 stage2 xfs_stage1_5

root@cheer:/mylinux/rootfs/boot/grub# cd

..

root@cheer:/mylinux/rootfs/boot# cd ..

root@cheer:/mylinux/rootfs# ls

boot lost+found

root@cheer:/mylinux/rootfs# mkdir dev

root@cheer:/mylinux/rootfs/dev# mknod console c 5

1

root@cheer:/mylinux/rootfs/dev# mknod null c 1

3

root@cheer:/mylinux/rootfs/dev# mkdir

proc

root@cheer:/mylinux/rootfs/dev# mkdir

etc

root@cheer:/mylinux/rootfs/dev# ls

console etc null proc

root@cheer:/mylinux/rootfs/dev# rm -rf etc

proc

root@cheer:/mylinux/rootfs/dev# ls

console null

root@cheer:/mylinux/rootfs/dev# cd ..

root@cheer:/mylinux/rootfs# mkdir etc

root@cheer:/mylinux/rootfs# mkdir proc

root@cheer:/mylinux/rootfs# ls

boot dev etc lost+found proc

root@cheer:/mylinux/rootfs# mkdir var

root@cheer:/mylinux/rootfs# mkdir home

root@cheer:/mylinux/rootfs# mkdir sys

root@cheer:/mylinux/rootfs# mkdir lib

root@cheer:/mylinux/rootfs# ls

boot dev etc home lib lost+found proc sys var

root@cheer:/mylinux/rootfs# cp -r

/opt/i586-linux-gcc/i586-buildroot-linux-uclibc/sysroot/lib

/mylinux/rootfs/lib/

root@cheer:/mylinux/rootfs/lib# ls

ld-uClibc-1.0.5.so libcrypt-1.0.5.so libm-1.0.5.so libresolv.so.1

ld-uClibc.so.1 libcrypt.so.1 libm.so.1 librt-1.0.5.so

libatomic.a libc.so.1 libnsl-1.0.5.so librt.so.1

libatomic.la libdl-1.0.5.so libnsl.so.1 libuClibc-1.0.5.so

libatomic.so libdl.so.1 libpthread-1.0.5.so libutil-1.0.5.so

libatomic.so.1 libgcc_s.so libpthread.so.1 libutil.so.1

libatomic.so.1.1.0 libgcc_s.so.1 libresolv-1.0.5.so

root@cheer:/mylinux/rootfs# cd etc

root@cheer:/mylinux/rootfs/etc# touch

inittab

inittab 文件内容:

#/etc/inittab

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

tty1::respawn:-/bin/sh

::ctrlaltdel:/sbin/reboot

::shutdown:/bin/umount -a –r

root@cheer:/mylinux/rootfs/etc# touch fstab

fstab 文件内容:

#device mount-point type

options dump fsck order

proc /proc proc defaults 0

0

tmpfs /tmp tmpfs defaults 0 0

sysfs /sys sysfs defaults 0 0

tmpfs /dev tmpfs defaults 0 0

ramfs /dev tmpfs defaults 0 0

var /dev tmpfs defaults 0 0

root@cheer:/mylinux/rootfs/etc# mkdir

init.d

root@cheer:/mylinux/rootfs/etc/init.d# touch rcS

rcS文件内容

#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin

runlevel=S

prevlevel=N

umask 022

export PATH runlevel

prevlevel

#

# Trap CTRL-C &c only in this

shell

#

mount -a

mkdir /dev/pts

mount -t devpts devpts /dev/pts

echo /sbin/mdev >

/proc/sys/kernel/hotplug

mdev -s

root@cheer:/mylinux/rootfs/etc# touch profile

profile文件内容

#Ash profile

#vim:syntax=sh

#No core files by default

#ulimit -S -c 0> /dev/null

2>&1

USER="`id -un`"

LOGNAME=$USER

PATH=$PATH

export USER LOGNAME PATH

root@cheer:/mylinux/rootfs/boot/grub# touch

menu.lst

root@cheer:/mylinux/rootfs/boot/grub# vim

menu.lst

menu.lst 文件内容

default 0

timeout 30

title linux on mylinux.img

root (hd0,0)

kernel (hd0,0)/bzImage root=/dev/ram

init=/bin/ash

initrd (hd0,0)/initrd4M.img

把 Busybox 目录下_install 目录里面的所有家伙都拷贝到 rootfs 中

root@cheer:/busybox/busybox-1.23.2# cp -r

_install/ /mylinux/rootfs/

利用grub启动软盘,在硬盘映像上添加grub功能

$qemu -boot a -fda initrd4M.img -hda

mylinux.img

进入grub界面后:

$root (hd0,0)

$setup (hd0)

测试从磁盘启动grub引导linux系统:

$qemu -hda mylinux.img

linux内核做界面,基于linux内核制作linux系统相关推荐

  1. 如何做一个基于JAVA失物招领网站系统毕业设计毕设作品(springboot框架)

    分析架构 我们开发系统,常规有两个架构,一个BS架构(浏览器/服务器模式),一个CS(客户端/服务器端模式):基于JAVA的网站开发属于B/S架构(即浏览器和服务器架构模式),架构如图 分析系统功能 ...

  2. 如何做一个基于JAVA二手交易网站系统毕业设计毕设作品(springboot框架)

    分析架构 我们开发系统,常规有两个架构,一个BS架构(浏览器/服务器模式),一个CS(客户端/服务器端模式):基于JAVA的网站开发属于B/S架构(即浏览器和服务器架构模式),架构如图 分析系统功能 ...

  3. 如何做一个基于JAVA餐厅座位预定系统毕业设计毕设作品(springboot框架)

    分析架构 我们开发系统,常规有两个架构,一个BS架构(浏览器/服务器模式),一个CS(客户端/服务器端模式):基于JAVA的网站开发属于B/S架构(即浏览器和服务器架构模式),架构如图 分析系统功能 ...

  4. 如何做一个基于JAVA景点景区售票系统毕业设计毕设作品(springboot框架)

    分析架构 我们开发系统,常规有两个架构,一个BS架构(浏览器/服务器模式),一个CS(客户端/服务器端模式):基于JAVA的网站开发属于B/S架构(即浏览器和服务器架构模式),架构如图 分析系统功能 ...

  5. 如何做一个基于JAVA小说电子书阅读系统毕业设计毕设作品(springboot框架)

    分析架构 我们开发系统,常规有两个架构,一个BS架构(浏览器/服务器模式),一个CS(客户端/服务器端模式):基于JAVA的网站开发属于B/S架构(即浏览器和服务器架构模式),架构如图 分析系统功能 ...

  6. 如何做一个基于JAVA外卖点餐系统毕业设计毕设作品(springboot框架)

    分析架构 我们开发系统,常规有两个架构,一个BS架构(浏览器/服务器模式),一个CS(客户端/服务器端模式):基于JAVA的网站开发属于B/S架构(即浏览器和服务器架构模式),架构如图 分析系统功能 ...

  7. 如何做一个基于JAVA多用户B2C商城系统毕业设计毕设作品(springboot框架)

    分析架构 我们开发系统,常规有两个架构,一个BS架构(浏览器/服务器模式),一个CS(客户端/服务器端模式):基于JAVA的网站开发属于B/S架构(即浏览器和服务器架构模式),架构如图 分析系统功能 ...

  8. linux 挂iscisc存储,基于arm的嵌入式linux操作系统的移植研究-通信与信息系统专业论文.docx...

    基于arm的嵌入式linux操作系统的移植研究-通信与信息系统专业论文 Classified Index: TP316.8 U.D.C: 621.38 Dissertation for the Mas ...

  9. Android 浏览器内核浅谈,基于WebKit内核的Android手机浏览器的性能研究与加载优化...

    南京邮电大学 硕士 2017 基于WebKit内核的Android手机浏览器的性能研究与加载优化 Performance Research and Load Optimization of Andro ...

最新文章

  1. lua类库 middleclass学习笔记
  2. FTP协议的命令的使用(转)
  3. PowerDesigner生成数据库建表sql脚本
  4. mysql建表的auto_increment_koa2+koa+mysql快速搭建nodejs服务器
  5. 【django】基础条件查询
  6. C# 中特性(Attribute)的使用简介
  7. 【转】ADO.NET对数据库操作经典类
  8. animateWithDuration
  9. Aspose.Words 自定义文档模版生成操作类
  10. 在Eclipse中运行hadoop程序
  11. 【JZOJ4964】【GDKOI2017模拟1.21】Rhyme
  12. spring面试专题一点通,再也不用担心面试不会回答了
  13. 【pyqt5学习】——graphicView显示opencv图像
  14. js识别用户设备是移动端手机时跳转到手机网站
  15. 左手用R右手Python系列14——日期与时间处理
  16. uniapp底部导航栏中间凸起_PPT导航栏,真的非常好用!
  17. Android几种layout(布局)的区别
  18. 效率软件:微软远程桌面安卓版
  19. JDBC基础操作汇总
  20. 【洛谷】P1425 小鱼的游泳时间

热门文章

  1. 32位软件 可以装在64位上吗
  2. oracle 排序后取中间的数据
  3. 共享办公,改善租赁市场灵活
  4. PTA(Basic Level) 1069:微博转发抽奖 (C语言实现)
  5. java 多线程 变慢_java多线程并发程序执行慢有什么原因?该怎么解决?
  6. SpringBoot应用与原理之集成Log4j2
  7. php处理heic格式图片,电脑上怎么查看HEIC格式?一招解决HEIC转JPG,轻轻松松看图片!...
  8. 灭霸的响指并不是真随机消灭半数宇宙人口的!
  9. 用ajax+js+dom+php+mysql,方百度goole的分页~~~~~~~~哦!
  10. golang gccgo vs gc