使用Busybox-1.2.0制作根文件系统

cross-3.3.2

make-3.8.1

STEP 1:

创建根文件系统目录,主要包括以下目录/bin,/etc,/dev,/mnt,/sbin,/usr,/sbin,/tmp

/proc,/lib. /usr下有bin, sbin, lib, local, etc   /mnt下有etc

创建多级目录可以使用mkdir –p usr/bin/ …….

STEP 2:

升级make到3.81版本,用RH9自己带的make 3.79会出错

进入make-3.81目录,执行:# ./configure    # make   #make install

会把make安装到/usr/local/bin目录下,要使新make立即生效,要设置环境变量

PATH=/usr/local/bin:$PATH。设置完成后,就可以编译Busybox了。

STEP 3:

进入busybox-1.2.0目录,执行# make defconfig

执行# make menuconfig

Busybox Setting -----> Build Options ----->

选择上 Build BusyBox as a static binary (no shared libs)

Do you want to build BusyBox with a Cross Compiler?

指定交叉编译器为

(/usr/local/arm/3.3.2/bin/arm-linux-)Cross Compiler prefix

Installation Options ----->

选择上 Don’t use /usr

设置Busybox installation prefix为 ../rootfs即安装目录.

在Shells中,选择Choose your default shell为ash.

保存退出

STEP 4:

# make    # make install

安装完后,就会把busybox拷到自己指定的rootfs 路径下,同时会生成一个linuxrc文件,这个是busybox自带的启动文件,也可以自己编写启动文件

Linux内核使用的是2.4.18

用3.3.2交叉编译器和1.2.0版本的busybox编译通过

我开始用1.9.2版本的,用2.95.3,3.4.1,3.3.2编译均不通过

STEP 5:   这个是用来启动linux时输入用户和密码的

编译tinylogin-1.4。进入tinylogin-1.4目录,修改Makefile文件如下:

DOSTATIC = true

USE_SYSTEM_PWD_GRP = false

USE_SYSTEM_SHADOW = false

CROSS = /usr/local/arm/3.3.2/bin/arm-linux-

STEP 6:

执行# make PREFIX=../rootfs install      安装到指定路径

STEP 7:

进入根文件系统rootfs的etc目录,执行如下操作:

拷贝Busybox-1.2.0/examples/bootfloopy/etc/* 到当前目录下。

# cp –r ../../busybox-1.2.0/examples/bootfloopy/etc/* ./

拷贝/etc/passwd, /etc/group, /etc/shadow到当前目录下。

# cp /etc/passwd ./

# cp /etc/group ./

# cp /etc/shadow ./

修改inittab,把第二项改为::respawn:-/bin/login

修改profile,加入PATH环境变量:export PATH=/bin:/sbin:/usr/bin:/usr/sbin

设置链接库:export LD_LIBRARY_PATH=/lib:/usr/lib

对以下三个文件修改,只保存与root相关的项,根据具体情况内容会有所不同。

修改passwd为root:x:0:0:root:/root:/bin/sh,即只保存与root相关项,而且最后改成/bin/sh。

修改group为root:x:0:root

修改shadow为root:$1$x9yv1WlB$abJ2v9jOlOc9xW/y0QwPs.:14034:0:99999:7:::

STEP 8:

制作cramfs镜像,下载到实验箱上就可以引导起来了。

# mkcramfs rootfs rootfs.cramfs

这个是一个基本的移植过程,下面看一下busybox的启动过程

先进入vivi, 执行param show 会在最后一行看到:

Linux command line: noinitrd root=/dev/mtdblock/1 init=/linuxrc console=ttyS0

这个是vivi传给linux的命令行参数,root=表示root根文件系统挂在哪个设备下,这里是mtd分区的,如果是bon分区的,就会是root=/dev/bon/2  init=/linuxrc这个最重要,表示初始化启动脚本为根目录下的linuxrc,console=ttyS0 初始化控制台为串口

BusyBox的intit命令提供了类似传统init程序的系统启动和初始化功能,init程序(如/sbin/init)只是一个指向busybox程序(/bin/busybox)的符号链接,也就是说,busybox是系统第一个执行的应用程序。Busybox由文件名识别出要执行的命令是init, 然后跳转到init例程去运行

Busybox init 依次执行如下任务:

设置init的信号处理函数

初始化控制台

分析/etc/inittab配置文件

执行系统初始化脚本,如/etc/init.d/rcS

完成初始化控制台后,busybox检查/etc/inittab文件是否存在,如果不存在,将使用一个缺省的inittab,我可可以自己写一个inittab文件,格式如下:

id:runlevel:action:process

id指定要启动的进程   runlevel是运行级别,busybox不支持运行级别,所以为空

action是要执行的动作,process指定要运行的程序和启动的命令行参数

Action:

sysinit   指定初始化脚本路径

respawn  当某进程结束时重启该程序

askfirst  在启动程序前提示用户按回车键

wait  等待所启动的进程结束

once  只运行进程一次,不等待进程结束

crtlaltdel 按组合键时执行的进程

shotdown 系统关闭时运行的进程

restart 重启时运行的进程,通常是init本身

自己写的inittab

::sysinit:/etc/init.d/rcs

::respawn:-/bin/sh

tty2:askfirst:-/bin/sh

::ctrlaltdel:/bin/umount –a –r

第一句指定执行初始化脚本为 /etc/init.d/rcS

第二句就是当进程退出,如执行exit后,又重新出现命令提示符

如果要用帐号密码登陆,则改成-/bin/login

第三句是在启动linux后,提示要按回车才能进入

第四句是在按组合键后,执行umount,把所有文件系统umount

再看/etc/init.d/rcS

#!/bin/sh          //指定shell

/bin/mount –a        //mount –a 为挂载全部文件系统,详见/etc/fstab

exec /usr/etc/.rc.local   //执行rc.local

rcS只完成挂载全部文件系统,然后执行rc.local,进入/usr/etc,看rc.local

#!/bin/sh

ifconfig eth0 192.168.220.10   //设置板子IP

echo “Set IP = 192.168.220.10”

mount –t nfs –o nolock ……………..  //挂载NFS

echo “mount nfs ok”

也可以写一些其他的挂载命令

到这里就完成了启动过程,有时也可以在/etc下写一个profile,这个是由shell执行的,启动后,按完回车才执行,这里也可以写一些初化脚本,如初始化环境变量

总结:linuxrc -> /sbin/init -> /etc/inittab -> /etc/init.d/rcS -> /usr/etc/rc.local   /etc/profile

也可以编写自己的linuxrc

#!/bin/sh

/bin/mount –n –t ramfs ramfs /etc

/bin/cp –a /mnt/etc/* /etc

/bin/mount –f –ramfs ramfs /tmp

exec /sbin/init

主要就是最后一句,执行init

把/etc中的文件放到/mnt/etc/下,挂载/etc/为ramfs,然后把/mnt/etc/下的所有文件拷到/etc下,这时/etc下就为可写的了,这样可以方便修改脚本

最好也将/tmp挂为ramfs,因为执行QT程序时,需要tmp目录为可写

使用Busybox-1.2.0制作根文件系统的更多相关文章

  1. 制作根文件系统之Busybox init进程的启动过程分析

    先来介绍一下什么是Busybox:它是将众多的UNIX命令集合进一个很小的可执行程序中. 在制作根文件系统之内核如何启动init进程中遗留了一个问题是/linuxrc是内核启动的第一个应用程序,那么它 ...

  2. 通过busybox制作根文件系统

    通过busybox制作根文件系统可以自定义选项,在制作的根文件系统中添加需要的命令,指定生成的根文件系统到相应的目录下. 一. 根文件系统的获取方式--->官网: https://busybox ...

  3. 通过busybox制作根文件系统详细过程

    我在之前的uboot通过NFS挂载ubuntu根文件系统中也有实现过根文件系统的制作,那只是在ubuntu官网已经做好的根文件基础上安装一些自己所需的软解而已.而使用busybox制作根文件系统可以自 ...

  4. 利用busybox制作根文件系统

    实际项目中可以使用Buildroot制作根文件系统 1.busybox源码下载及配置 https://busybox.net/downloads/ 1.1.修改Makefile (1) ARCH = ...

  5. 第4阶段——制作根文件系统之分析init进程(2)

    本节目标: (1) 了解busybox(init进程和命令都放在busybox中) (2) 创建SI工程,分析busybox源码来知道init进程做了哪些事情 (3)  分析busybox中init进 ...

  6. mini6410基于linux2.6.36内核通过NFS启动根文件系统总结(四制作根文件系统及通过NFS挂载文件系统)

    http://blog.csdn.net/yinjiabin/article/details/7489563 根文件系统一般包括: 1)基本的文件系统结构,包含一些必须的目录,比如:/dev,/pro ...

  7. mkyaffs2image制作根文件系统、使用NFS挂载虚拟机目录(2)

    1.制作根文件系统及nfs烧写 1.1 先解压文件系统,/wok/nfs_root 目录下是已经构造好的各种文件系统:① fs_mini.tar.bz2 是最小的根文件系统,里面的设备节点是事先建立好 ...

  8. 制作根文件系统之内核如何启动init进程

    start_kernel其实也是内核的一个进程,它占用了进程号0,start_kernel的内容简写如下: asmlinkage void __init start_kernel(void) //内核 ...

  9. zju(4)使用busybox制作根文件系统

    1.实验目的 1.学习和掌握busybox相关知识及应用: 2.学会使用交叉编译器定制一个busybox: 3.利用该busybox制作一个文件系统: 4.熟悉根文件系统组织结构: 5.定制.编译ra ...

随机推荐

  1. Asp.Net MVC过滤器小试牛刀

    在上学期间学习的Asp.Net MVC,基本只是大概马马虎虎的了解,基本处于知其然而不知其所以然.现在到上班,接触到真实的项目,才发现还不够用,于是从最简单的过滤器开始学习.不得不说MVC的过滤器真是 ...

  2. 一步步学习NHibernate(10)——连接查询和子查询(2)

    请注明转载地址:http://www.cnblogs.com/arhat 在上一章中,老魏讲述了HQL的链接查询,本章呢,老魏开始讲述HQL的子查询.子查询在SQL中也是占据着非常重要的作用,如果没有 ...

  3. codeblocks常用快捷键

    CodeBlocks常用操作快捷键编辑部分:Ctrl + A:全选Ctrl + C:复制Ctrl + X: 剪切Ctrl + V:粘贴Ctrl + Z:撤销Ctrl + S:保存Ctrl + Y / ...

  4. 微软职位内部推荐-Senior SDE for Cloud Platform

    微软近期Open的职位: Microsoft Launched the public cloud service-Azure in China on May 2013, Cosmos is the k ...

  5. validate[.unobtrusive]和Bootstrap实现tooltip错误提示

    validate[.unobtrusive]和Bootstrap实现tooltip错误提示 类似的文章园子里已有,请看这里,个人感觉稍显复杂,日前也打算写一个简单的给项目用,一些关键点记录于此.最终效 ...

  6. 用Canvas制作小游戏——贪吃蛇

    今天呢,主要和小伙伴们分享一下一个贪吃蛇游戏从构思到实现的过程~因为我不是很喜欢直接PO代码,所以只copy代码的童鞋们请出门左转不谢. 按理说canvas与其应用是老生常谈了,可我在准备阶段却搜索不 ...

  7. MySQL中字符串函数详细介绍

    MySQL字符串函数对于针对字符串位置的操作,第一个位置被标记为1. ASCII(str)返回字符串str的 最左面字符的ASCII代码值.如果str是空字符串, 返回0.如果str是NULL,返回N ...

  8. Linux学习笔记(2)-用户和用户组

    用户(user)和用户组(group)概念 linux是一个多用户操作系统,他允许多个用户登录linux系统进行各自不同的操作.为了方便管理用户不同的权限,组的概念应用而生,一个组可以包含多个用户,共 ...

  9. 5.1:FactoryBean的使用

    5.1  FactoryBean的使用 一般情况下,Spring通过反射机制利用bean的class属性指定实现类来实例化bean .在某些情况下,实例化bean过程比较复杂,如果按照传统的方式,则需 ...

  10. Otto Product Classification Winner's Interview: 2nd place, Alexander Guschin ¯\_(ツ)_/¯

    Otto Product Classification Winner's Interview: 2nd place, Alexander Guschin ¯\_(ツ)_/¯ The Otto Grou ...