制作一个简单的文件系统

news/2024/5/19 5:15:54 标签: 编译器, makefile, linux, 嵌入式, image, shell

三.制作一个简单的文件系统

0 BusyBox简介

什么是Busybox呢?
      从名字上直接理解,Busybox是一个繁忙的盒子,其实,Busybox可以理解为一个Linux的命令集合,我们在进行Linux操作时所需要的常用命令,都可以在Busybox里找到,但Busybox又不是简单的将所有的命令集合在一起,它采用了一种非常巧妙的方式,即使用一个程序完成所有的事
     平时我们用lsvi等命令,都要用到glibc的相关调用,所以如果每个命令都静态链接这些调用,每个命令都会很大,因此在通常的发行版中,都会动态链接glibc,可是glibc的动态库本身就很大,这在PCLinux平时上还可以接受,但在嵌入式系统中,这就太大了,而且又不是所有的库函数都使用。
     一般采用两种解决办法,一种是裁剪glibc,另一种就是Busybox的办法,即把lsvi等程序的main函数改一下名,全部链接在一起,然后静态链接glibc,这样,只有需要的调用才会链接进来,整个Busybox程序可能都比glibc的动态库小。
       因此,Busybox的工作原理是根据文件名来决定用户想调用的是那个程序,例如,如果你的busybox程序的文件名是ls,运行的就是ls,是vi,就运行vi

获取BusyBox源码

首先我们下载一个busybox 的源码,到网页http://www.busybox.net/downloads/,就可以下载了,这里我下载了busybox-1.13.0.tar.bz2 这个压缩包。这里我们使用的交叉编译器还是4.3.3 的。

修改并配置BusyBox

解压busybox,使用命令#tar xvfj busybox-1.13.0.tar.bz2 -C /opt/EmbedSky/

然后进到源码中,修改Makefile 文件,把164 行修改为:

CROSS_COMPILE = arm-linux-

189 行修改为:

ARCH = arm

然后输入:#make menuconfig,进入配置单:

(2)

然后配置如下:(下面只列出需要注意的地方;其它未列出的地方,可以采用默认,可以自己添加。)

Busybox Settings --->

General Configuration --->

Buffer allocation policy (Allocate with Malloc) --->

[*] Show verbose applet usage messages

[*] Store applet usage messages in compressed form

[*] Support --install [-s] to install applet links at runtime

[*] Enable locale support (system needs locale for this to work)

[*] Support for --long-options

[*] Use the devpts filesystem for Unix98 PTYs

[*] Support writing pidfiles

[*] Runtime SUID/SGID configuration via /etc/busybox.conf

[*] Suppress warning message if /etc/busybox.conf is not readable

(/proc/self/exe) Path to BusyBox executable

Build Options --->

[*] Build BusyBox as a static binary (no shared libs)

[*] Build with Large File Support (for accessing files > 2 GB)

Installation Options --->

[ ] Don't use /usr

Applets links (as soft-links) --->

(./_install) BusyBox installation prefix

Busybox Library Tuning --->

(6) Minimum password length

(2) MD5: Trade Bytes for Speed

[*] Faster /proc scanning code (+100 bytes)

[*] Command line editing

(1024) Maximum length of input

[*] vi-style line editing commands

(15) History size

[*] History saving

[*] Tab completion

[*] Fancy shell prompts

(4) Copy buffer size, in kilobytes

[*] Use ioctl names rather than hex values in error messages

[*] Support infiniband HW

Linux Module Utilities --->

(/lib/modules) Default directory containing modules

(modules.dep) Default name of modules.dep

[*] insmod

[*] rmmod

[*] lsmod

[*] modprobe

--- Options common to multiple modutils

[ ] Support version 2.2/2.4 Linux kernels

[*] Support tainted module checking with new kernels

[*] Support for module.aliases file

[*] Support for module.symbols fileLinux System Utilities --->

然后退回到根配置单,选择“Save Configuration to an Alternate File”选项,保存刚刚的配置为.config

注意点::::

(1)Build BusyBox as a static binary (no shared libs)  
             这个最好选上,因上这样子编译出来的busyBox才是可以独立运行的,否则的话需要将它用到的一些库文件放到文件系统的lib目录中。

(3)Don't use /usr   
    这样子编译出来的busybox才不会安装到你主机的/usr目录下。一定要选上

(4)Do you want to build BusyBox with a Cross Compiler?              │ │  
          │ │(/HOME/toolchains/gcc-4.0.2-glibc-2.3.5/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu│
          上面是我的交叉编译器的路径,你要根据你具体的情况来设置。

首先进入菜单Build Options,选择“Do you want to build BusyBox with a Cross Compiler?”选项,并在“Cross Compiler prefix”栏中输入交叉编译器安装的位置,/usr/local/arm/2.95.3/bin/arm-linux-,注意最后是arm-linux-,不能加其他字符或空格。
          然后在“Any extra CFLAGS options for the compiler”栏中输入需要匹配的arm-linux系统源码目录中头文件所在的位置,如“/home/works/linux-2.4.27/include”,然后退出返回主菜单。
          再根据系统需要,进入所需命令工具所在的子菜单中,选择相应的命令项。如需要“insmod”命令,就在“Linux Module Utilities”子菜单中选中。

编译并安装BusyBox

然后退出配置单,然后编译出busybox 即可,使用命令:#makemake install,编译结束后会在busybox-1.13.0 目录下面生成一个名为“_install”的目录.完成busybox 的编译之后,我们就可以进行文件系统的构建了。
把编译busybox生成的二进制文件放在NFS目录,有bin sbin usrlinuxrc

创建etc目录,在etc目录新建inittab文件

# /etc/inittab

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

S3c2410_serial0::askfirst:-/bin/sh

::ctrlaltdel:/sbin/reboot

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

新建fstab文件

#/etc/fstab

# device mount-point type options dump fsck order

proc /proc proc defaults 0 0

tmpfs /tmp tmpfs defaults 0 0

8etc目录下建子目录init.dinit.d目录下rcS文件

mkdir init.d

cd ninit.d

vim rcS内容为

#!/bin/sh

mount -a

保存,退出。

加上可执行属性

sudo chmod +x

==========================

NFS目录下创建其它目录

mkdir dev tmp proc

=======================

dev目录下创建必须设备文件

sudo mknod console c 5 1

sudo mknod s3c2410_serial0 c 204 64

sudo mknod null c 1 3

=====================

#mkyaffsimage_2 root_2.6.30.4/ root_2.6.30.4.bin

注意:上面的操作命令直接的空格键,制作针对64MB Nand Flash 的文件系统使用:mkyaffsimage_2 软件,制作针对128MB 以上的Nand Flash 的文件系统使用:mkyaffs2image 的软件,该软件在交叉编译器里面已经提供了,安装交叉编译器的同时也就安装了它,在“/usr/local/sbin/”目录下。

然后把制作好的镜像root_2.6.30.4.bin 复制出来,烧写到开发板中,就可以运行了。

启动开发板,

看到

Please press Enter to activate this console.

回车,即可进入shell控制台,

最小系统启动成功。


http://www.niftyadmin.cn/n/1748391.html

相关文章

linux 6.x crontab 定时任务使用

2019独角兽企业重金招聘Python工程师标准>>> 安装crontab: yum install crontabs 服务操作说明: /sbin/service crond start //启动服务/sbin/service crond stop //关闭服务/sbin/service crond restart //重启服务/sbin/service crond relo…

u-boot启动过程分析

从源代码看系统启动过程 为什么要分析源代码?分析优秀的源代码本身就是一个学习的过程,也是进行深入研究的必经之路。不过在此我们的主要目的并非要研究U-boot或Bootloader技术本身,而仅仅是为了成功的并且恰当的将U-Boot移植到我们的开发板…

数据库学习笔记-20170309

数据库语言:DDL(Data Defination Language):数据定义语言,主要用于定义数据库、表、视图、索引和触发器等。像DROP/CREATE/ALTER.DML(Data Manipulation Language):主要包括对数据的增删改查。INSERT插入数据、UPDATE更新数据、DELETE删除数据。DQL(Data…

container_of

container_of 理解 收藏 问题:如何通过结构中的某个变量获取结构本身的指针??? 关于container_of见kernel.h中:/*** container_of - cast a member of a structure out to the containing structure* ptr: the pointer to t…

android SoundPool

SoundPool主要用于播放时间较短的音效,使用soundPool占用的资源也不会太大。 参考链接 http://o7planning.org/en/10523/playing-sound-effects-in-android-with-soundpool http://www.cnblogs.com/plokmju/p/android_SoundPool.html Example 创建一个按键&#xff…

嵌入式系统终端分析

嵌入式系统终端分析 ------------------------------------本文系本站原创,欢迎转载! 转载请注明出处:http://sjj0412.cublog.cn/------------------------------------------ 当我们打开机器或一个嵌入式系统时,我们可能都适应了它会显示信息,我们也…

什么是 jQuery EasyUI

jQuery EasyUI 是一个基于 jQuery 的框架,集成了各种用户界面插件。 jQuery EasyUI 框架提供了创建网页所需的一切,帮助您轻松建立站点。 easyui 是一个基于 jQuery 的框架,集成了各种用户界面插件。easyui 提供建立现代化的具有交互性的 jav…

嵌入式 linux 智能设备应用中 web 支持的实现(一)

嵌入式 linux 智能设备应用中 web 支持的实现(一)由两篇文章组成的系列文章主要阐述如何在嵌入式 Linux 智能设备的应用程序中增加 Web 支持。第 1 部分,我们将会介绍嵌入式 Linux 智能设备开发的现状、Qt 和 WebKit 的概念。并以广告机和手持点菜机等应用为例&…