加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_汕头站长网 (https://www.0754zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

如何编译并运行Linux系统?

发布时间:2022-09-29 14:56:16 所属栏目:Linux 来源:
导读:  学习Linux内核是一件振奋人心的事情,而在学习伊始对Linux内核的成功编译并运行也更会燃起更足的动力去钻研。本文从下载并编译Linux内核、编译busybox、制作一个最小的根文件系统,最后用qemu启动你编译好的内核
  学习Linux内核是一件振奋人心的事情,而在学习伊始对Linux内核的成功编译并运行也更会燃起更足的动力去钻研。本文从下载并编译Linux内核、编译busybox、制作一个最小的根文件系统,最后用qemu启动你编译好的内核和根文件系统 ,初步感受Linux内核的魅力所在。
 
  首先明确两点:
 
  配置内核就是你来决定编码哪些代码;编译内核就是生成可执行文件的一个过程。
 
  再明确内核文件的产物名称:
 
  好了,明确了上述几点,就可以开始实验了。本文的实验环境如下:
 
  实验目标:
 
  编译Linux内核源码编译busybox制作一个简版文件系统制作根文件系统镜像文件利用qemu运行linux内核1.下载并编译Linux内核
 
  Index of /pub/linux/kernel/v4.x/mirrors.edge.kernel.org/pub/linux/kernel/v4.x/
 
  下载并解压后,进入目录。
 
  1.指定硬件体系架构
 
  为了演示方便,选用了x86架构,如果编译arm则需要再下载对应的toolchain。
 
  $?export?ARCH=x86
  2.配置board config
 
  $?make??x86_64_defconfig
  3.配置内核
 
  这一步其实是对第2步的进行微调,这里我们使用基于ncurse库编制的图形界面工具:
 
  $?make?menuconfig
  如果执行该命令时出现:
 
  linux编码_linux 显示系统编码_声卡编程 linux 编码
 
  原因:缺少ncurses dev工具
 
  sudo?apt-get?install?libncurses5-dev
  如果需要内核支持ramdisk驱动,需要选中如下配置:
 
  General?setup??--->
  ???????---->?[*]?Initial?RAM?filesystem?and?RAM?disk?(initramfs/initrd)?support
  ????Device?Drivers??--->
  ???????[*]?Block?devices??--->
  ???????????????<*>???RAM?block?device?support
  ???????????????(65536)?Default?RAM?disk?size?(kbytes)
  4.编译内核
 
  $?make?-j8
  编译成功后的内核位于:arch/x86_64/boot/bzImage
 
  至此,内核编译完成。
 
  2. 编译busybox
 
  什么是busybox?
 
  busybox号称“嵌入式Linux的瑞士军刀”。BusyBox工具小巧高效,可以替代一大批常用的标准Linux命令行工具,功能有所简化,非常适合资源有限的嵌入式平台。BusyBox是模块化且高度可配置的,可以对其进行裁剪以满足特定需求。
 
  在如下链接下载busybox:
 
  我们以busybox-1.30.0作为实验对象。
 
  下载之后解压并进入该busybox目录开始配置并编译。这里把busybox配置为静态编译,这样不依赖其他动态库比较容易操作和演示。编译则似曾相识,与编译内核的指令是一样的!
 
  $?make?menuconfig
 
  Busybox?Settings??--->
  ??????Build?Options??--->
  ????????????[*]?Build?BusyBox?as?a?static?binary?(no?shared?libs)
  配置完之后进行编译和安装
 
  $?make?&&?make?install
  make是编译busybox,make install是为了在对应目录中编译安装一系列的工具。
 
  编译完成后的busybox就安装在源码根目录下的_install目录了。
 
  至此,我们对Linux内核和busybox进行了配置和编译。光编译肯定不过瘾linux编码,接下来演示基于busybox制作一个简单的文件系统,并通过qemu模拟器运行Linux,真正的让内核工作起来!
 
  3. 制作一个简版文件系统
 
  编译完成后的busybox就安装在源码根目录下的_install目录了,我们进入_install目录,补充一些必要的文件或目录,相关的shell命令如下:
 
  $?mkdir?-p?etc?dev?mnt?proc?sys?tmp?mnt
  $?mkdir?-p?etc/init.d/
 
  $?mkdir?etc?dev?mnt
  $?mkdir?-p?proc?sys?tmp?mnt
  $?mkdir?-p?etc/init.d/
  $?vim?etc/fstab
  proc????????/proc???????????proc?????????defaults????????0????????0
  tmpfs???????/tmp????????????tmpfs??????defaults????????0????????0
  sysfs???????/sys????????????sysfs????????defaults????????0????????0
  $?vim?etc/init.d/rcS
  echo?-e?"Welcome?to?tinyLinux"
  /bin/mount?-a
  echo?-e?"Remounting?the?root?filesystem"
  mount??-o??remount,rw??/
  mkdir?-p?/dev/pts
  mount?-t?devpts?devpts?/dev/pts
  echo?/sbin/mdev?>?/proc/sys/kernel/hotplug
  mdev?-s
  $?chmod?755?etc/init.d/rcS
  $?vim?etc/inittab
  ::sysinit:/etc/init.d/rcS
  ::respawn:-/bin/sh
  ::askfirst:-/bin/sh
  ::ctrlaltdel:/bin/umount?-a?-r
  $?chmod?755?etc/inittab
  $?cd?dev
  $?sudo?mknod?console?c?5?1
  $?sudo?mknod?null?c?1?3
  $?sudo?mknod?tty1?c?4?1?
  4. 制作根文件系统镜像文件
 
  思路:
 
  先制作一个空的镜像文件;然后把此镜像文件格式化为ext3格式接着把此镜像文件挂载,并把根文件系统复制到挂载目录卸载该镜像文件。打成gzip包。
 
  #!/bin/bash
  rm?-rf?rootfs.ext3
  rm?-rf?fs
  dd?if=/dev/zero?of=./rootfs.ext3?bs=1M?count=32
  mkfs.ext3?rootfs.ext3
  mkdir?fs
  mount?-o?loop?rootfs.ext3?./fs
  cp?-rf?./_install/*?./fs
  umount?./fs
  gzip?--best?-c?rootfs.ext3?>?rootfs.img.gz
  最终生成的文件系统镜像名字为:rootfs.img.gz
 
  准备好了内核和文件系统镜像,接下来就是见证奇迹的时刻!
 
  5. qemu运行linux内核
 
  $?qemu-system-x86_64?\
  ??-kernel?./linux-4.9.229/arch/x86_64/boot/bzImage??\
  ??-initrd?./busybox-1.30.0/rootfs.img.gz???\
  ??-append?"root=/dev/ram?init=/linuxrc"??\
  -serial?file:output.txt
 

(编辑:云计算网_汕头站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!