Exynos4412 文件系统制作(三)—— 文件系统移植

根文件系统一直以来都是所有类Unix操作系统的一个重要组成部分,也可以认为是嵌入式Linux系统区别于其他一些传统嵌入式操作系统的重要特征,它给Linux带来了许多强大和灵活的功能,同时也带来了一些复杂性。我们需要清楚的了解根文件系统的基本结构,以及细心的选择所需要的系统库、内核模块和应用程序等,并配置好各种初始化脚本文件,以及选择合适的文件系统类型并把它放到实际的存储设备的合适位置

      Linux的根文件系统以树型结构组织,包含内核和系统管理所需要的各种文件和程序,一般说来根目录”/”下的顶层目录都有一些比较固定命名和用途。

下面列出了一个Linux根文件系统中的比较常见的目录结构:

/bin 存放二进制可执行命令的目录

  该目录下存放所有用户都可以使用的、基本的命令,这些命令在挂接其它文件系统之前就可以使用,所以/bin目录必须和根文件系统在同一个分区中。

  /bin目录下常用的命令有:cat,chgrp,chmod,cp,ls,sh,kill,mount,umount,mkdir,m knod,[,test等“[”命令其实就是test命令,我们在利用Busybox制作根文件系统时,在生成的bin目录下,可以看到一些可执行的文件,也就是可用的一些命令。

/dev 存放设备文件的目录

  该目录下存放的是设备文件,设备文件是Linux中特有的文件类型,在Linux系统下,以文件的方式访问各种设备,即通过读写某个设备文件操作某个具体硬件。比如通过"dev/ttySAC0"文件可以操作串口0,通过"/dev/mtdblock1"可以访问MTD设备的第2个分区。

/etc 存放系统管理和配置文件的目录

  该目录下存放着各种配置文件,对于PC上的Linux系统,/etc目录下的文件和目录非常多,这些目录文件是可选的,它们依赖于系统中所拥有的应用程序,依赖于这些程序是否需要配置文件。在嵌入式系统中,这些内容可以大为精减。

/home 用户主目录,比如用户user的主目录就是/home/user,可以用~user表示

   用户目录,它是可选的,对于每个普通用户,在/home目录下都有一个以用户名命名的子目录,里面存放用户相关的配置文件。

/lib 存放动态链接共享库的目录

 该目录下存放共享库和可加载(驱动程序),共享库用于启动系统。运行根文件系统中的可执行程序,比如:/bin /sbin 目录下的程序。

/sbin存放系统管理员使用的管理程序的目录

  该目录下存放系统命令,即只有管理员能够使用的命令,系统命令还可以存放在/usr/sbin,/usr/local/sbin目录下,/sbin目录中存放的是基 本的系统命令,它们用于启动系统,修复系统等,与/bin目录相似,在挂接其他文件系统之前就可以使用/sbin,所以/sbin目录必须和根文件系统在同一个分区中。

  /sbin目录下常用的命令有:shutdown reboot fdisk fsck等,本地用户自己安装的系统命令放在/usr/local/sbin目录下。

/tmp 公用的临时文件存储点

  用于存放临时文件,通常是空目录,一些需要生成临时文件的程序用到的/tmp目录下,所以/tmp目录必须存在并可以访问。

/root 系统管理员的主目录

  根用户的目录,与此对应,普通用户的目录是/home下的某个子目录。

/mnt 系统提供这个目录是让用户临时挂载其他的文件系统。

  用于临时挂载某个文件系统的挂接点,通常是空目录,也可以在里面创建一引起空的子目录,比如/mnt/cdram /mnt/hda1 。用来临时挂载光盘、硬盘。

/proc 虚拟文件系统,可直接访问这个目录来获取系统信息

  这是一个空目录,常作为proc文件系统的挂接点,proc文件系统是个虚拟的文件系统,它没有实际的存储设备,里面的目录,文件都是由内核临时生成的,用来表示系统的运行状态,也可以操作其中的文件控制系统。

/usr 最庞大的目录,要用到的应用程序和文件几乎都在这个目录。

  /usr目录的内容可以存在另一个分区中,在系统启动后再挂接到根文件系统中的/usr目录下。里面存放的是共享、只读的程序和数据,这表明/usr目录下的内容可以在多个主机间共享,这些主要也符合FHS标准的。/usr中的文件应该是只读的,其他主机相关的,可变的文件应该保存在其他目录下,比如/var。/usr目录在嵌入式中可以精减。

/var 某些大文件的溢出区

  与/usr目录相反,/var目录中存放可变的数据,比如spool目录(mail,news),log文件,临时文件。


---------------------------------------------------------------------

一、移植环境:

1、  Ubuntu 10.10发行版

2、  u-boot.bin

3、  目标机:FS4412平台

4、  交叉编译器 arm-none-linux-gnueabi-gcc

---------------------------------------------------------------------


二、移植步骤

1、  源码下载

我们选择的版本是busybox-1.17.3.tar.bz2下载路径为:http://busybox.net/downloads/

2、  解压源码

$ tar xvf  busybox-1.17.3.tar.bz2

3、  进入源码目录

$ cd busybox-1.17.3

4、  配置源码

$ make menuconfig
Busybox Settings --->Build Options --->[*] Build BusyBox as a static binary (no shared libs)[ ] Force NOMMU build[ ] Build with Large File Support (for accessing files > 2 GB)(arm-cortex_a8-linux-gnueabi-) Cross Compiler prefix() Additional CFLAGS

5、  编译

$ make

6、  安装

busybox默认安装路径为源码目录下的_install

$ make install

7、  进入安装目录下

$ cd _install
$ ls
bin  linuxrc  sbin  usr

8、  创建其他需要的目录

$ mkdir  dev etc  mnt proc var tmp sys root

9、  添加库

在_install目录下创建一个lib文件夹,将工具链中的库拷贝到lib目录下

$ mkdir lib
$ cp /home/linux/x-tools/arm-cortex_a8-linux-gnueabi/arm-cortex_a8-linux-gnueabi/lib/*  ./lib/

删除lib下的所有目录、.o文件和.a文件,对库进行瘦身以减小文件系统的大小

$ rm *.o *.a
$ arm-cortex_a8-linux-gnueabi-strip  lib/*

10、 添加系统启动文件

在etc下添加文件inittab

$ vim /etc/inittab

文件内容如下:

#this is run first except when booting in single-user mode.
:: sysinit:/etc/init.d/rcS
# /bin/sh invocations on selected ttys
# Start an "askfirst" shell on the console (whatever that may be)
::askfirst:-/bin/sh
# Stuff to do when restarting the init process
::restart:/sbin/init
# Stuff to do before rebooting
::ctrlaltdel:/sbin/reboot

在etc下添加文件fstab

$ vim /etc/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

  这里我们挂在的文件系统有三个proc、sysfs和tmpfs,在内核中proc和sysfs默认都支持,而tmpfs是没有支持的,我们需要添加tmpfs的支持

修改内核配置:

$ make menuconfig
File systems --->Pseudo filesystems --->[*] Virtual memory file system support (former shm fs)[*] Tmpfs POSIX Access Control Lists

重新编译内核

$ make zImage

在etc下创建init.d目录,并在init.d下创建rcS文件

$ mkdir /etc/init.d -p
$ vim /etc/init.d/rcS

rcS文件内容为:

#!/bin/sh
# This is the first script called by init process
/bin/mount -a

为rcS添加可执行权限:

$ chmod  +x init.d/rcS

在etc下添加profile文件

$ vim /etc/profile

文件内容为:

#!/bin/sh
export HOSTNAME=farsight
export USER=root
export HOME=root
#export PS1="\[\u@\h \W\]\$ "
export PS1="[$USER@$HOSTNAME \W]\# "
PATH=/bin:/sbin:/usr/bin:/usr/sbin
LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
export PATH LD_LIBRARY_PATH

11、 设备文件创建

根文件系统中有一个设备节点是必须的,在dev下创建console节点

$ mknod   dev/console  c 5 1

重要:新制作的文件系统尺寸若超出8M,删除不需要的库文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/402113.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Snapchat, 给年轻人要的安全感

这几天,Snapchat因拒绝Facebook和谷歌的收购请求而名声大噪。40亿美金的收购请求,并不是任何一个人都可以淡然处之的。一、关于SnapchatSnapchat由两位斯坦福大学生创办,在2011 年9月上线。Snapchat的主要是所有照片都有一个1到10秒的生命期&…

Exynos4412 文件系统制作(二)—— 文件系统简介

一、Linux磁盘分区和目录 Linux发行版本之间的差别很少,差别主要表现在系统管理的特色工具以及软件包管理方式的不同。目录结构基本上都是一样的。 Windows的文件结构是多个并列的树状结构,最顶部的是不同的磁盘(分区)&#xff0c…

python的urllib2模块

https://www.cnblogs.com/erliang/p/4063883.html https://blog.csdn.net/u014343243/article/details/49308043 https://docs.python.org/zh-cn/2.7/library/urllib2.html

Python中的yield

《python中yield的用法详解——最简单,最清晰的解释》 https://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/ https://www.runoob.com/w3cnote/python-yield-used-analysis.html

Exynos4412 内核移植(七)—— 内核相关知识补充

一、内核调试方法简单分析 1、addr2line: 解决oops错误 a -- oops消息 oops(也称 panic),称程序运行崩溃,程序崩溃后会产生oops消息。应用程序或内核线程的崩溃都会产生oops消息,通常发生oops时,系统不会发…

MM引擎新应用——爱车加油记

基于MM应用引擎开发的EXTJS应用,车主每次加完汽油后,记录加油时的里程数以及加油金额和汽油价格,就可计算出上次加油后行驶的里程数、上次加油的平均油耗。点击刷新按钮,即可计算有记录以来的行驶公里数和再次期间加油金额和平均油…

Python风格

Python3学习之Python风格指南 PEP8 – Python代码样式指南(中文版)

### 阅读之痕-2013/11

2019独角兽企业重金招聘Python工程师标准>>> 阅读之痕-2013/11 Andy erpingwugmail.com 2013/11/01-2013/11/30 2013/11/01-2013/11/30 The story of rocksdb - Embedded key-value store for Flash and RAM http://rocksdb.org/intro.pdf High Performance Network…

Exynos4412 内核移植(六)—— 设备树解析

一、描述ARM Device Tree起源于OpenFirmware (OF),在过去的Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码,相当多数的代码只是在描述板级细节,而这些板级细节对于内核来讲,不过是垃圾&#xff…

Github Page创建个人主页以及绑定域名

2019独角兽企业重金招聘Python工程师标准>>> 在github中 我们可以通过github page创建个人主页 以及绑定域名 据说有300m空间 以及无限流量 不过只能支持静态html 以及一些脚本语言 顺便吐槽一下 阿里云最低配那个云空间服务器 512m内存 启动web服务器后 mys…

python基础-类

实例属性和类属性 类中,没有self指定的是类属性,有self指定的是实例属性。类中的方法是类属性。 类和实例都是名字空间。类是类属性的名字空间,实例时实例属性的名字空间。 可以通过类访问类属性,通过实例访问实例属性。如果实例…

Exynos4412 内核移植(五)—— 驱动的移植

以移植自己制作的驱动,学习内核移植中的驱动移植,及 驱动程序的动态编译和静态编译 硬件环境: Linux 内核版本:Linux 3.14 主机:Ubuntu 12.04发行版 目标机:FS4412平台 交叉编译工具:arm-none-l…

FTP文件共传输服务

FTP文件共传输服务一,vsftpd服务基础(1),FTP服务概述FTP(File Transfer Protocol,文件传输协议)是典型的C/S结构的应用层协议,需要由服务端软件、客户端软件共同实现文件传达输功能…

python基础-super

Super返回的是mro列表中的下一个类 python的super详解(二) 文档解释顺序MRO用于在祖先类中查找属性。每个定义的类,都有一个名为__mro__的属性,他是一个元组。 super(type[, ojb]) 给出type,super()返回type的父类。如果希望父类被绑定&#…

Exynos4412 内核移植(四)—— MMU 相关知识解析

一、MMU的产生 许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当…

Mysql limit 子查询

为什么80%的码农都做不了架构师?>>> (1)mysql limit 不支持子查询像下面这条语句无法执行 SELECT * FROM b_c_s1 where CT_ID IN (SELECT DISTINCT CT_ID FROM b_c_s1 LIMIT 0,2); (2)应该在只查询外面再…

python描述符

Python中的描述符 Python基本语法之描述符 Python 为什么要使用描述符?

Exynos4412 内核移植(二)—— 内核编译过程分析

内核的编译同样是从Makefile 来分析: 一、内核源码结构 Linux内核文件数目近2万,出去其他架构CPU的相关文件,他们分别位于顶层目录下的17个子目录,各个目录功能独立,下面是常用目录: arch:体系结构相关代码…

深入理解Java:注解(Annotation)

2019独角兽企业重金招聘Python工程师标准>>> 一、概述 1.什么是注解(Annotation) Annotation(注解)就是Java提供了一种元程序中的元素关联任何信息和着任何元数据(metadata)的途径和方法。Ann…