博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
S5PV210根文件系统的制作(一)
阅读量:5243 次
发布时间:2019-06-14

本文共 4863 字,大约阅读时间需要 16 分钟。

一、基本概念

文件管理:数据管理算法

文件系统:管理文件算法的载体

文件系统的功能:管理分区上的数据(增删查改)

文件系统的分类:fat32/ntfs/ext3/ext4/yaffs/jffs/cramfs/.....

文件系统的表现形态:

  window--------->森林

  linux------------>树 ------->文件目录标准

文件系统与根文件系统:

  根文件系统:  系统启动时加载的助文件系统

  其他文件系统:  根系统启动后挂载的其他文件系统

 

二、需要用到的工具

busybox-1.20.2.tar,yaffs2-source,bash-4.0.tar

下载地址:http://pan.baidu.com/s/1ntmMh5Z

三、根文件系统镜像设计

1)建立标准的linux文件目录(必备)

  /sbin  ------->超级用户工具命令

  /etc  --------->系统配置文件

  /bin  ---------->通用工具命令

  /dev  ---------->设备文件目录

  /lib  ------------>库文件目录  --------------->静态库、动态库

  命令: 

1 mkdir  /home/gec/build_rootfs2 3 cd  /home/gec/build_rootfs4 mkdir rootfs   ----->  创建根文件系统主目录  ----->   /5 6 cd rootfs7 mkdir {sbin,bin,dev,lib,etc}
View Code

2)配置busybox

  1.解压,并进入目录

# tar jxvf busybox-1.20.2.tar.bz2# cd busybox-1.20.2

  2.修改Makefile中的体系结构ARCH和交叉编译器前缀CROSS_COMPILE

# vim Makefile 修改:CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-ARCH = arm

  3.通过menuconfig配置busybox

  BusyBox的配置程序和linux内核菜单项配置方式简直一模一样。熟悉用make menuconfig方式配置linux内核的朋友很容易上手。

# make menuconfig选上以下几项:Busybox Settings --->  General Configuration  --->     [*] Don't use /usr    Build Options --->      [*] Build BusyBox as a static binary (no shared libs)这个选项是一定要选上,这样才能把BusyBox编译成静态链接的可执行文件,运行时才独立于其他函数库,否则需要其他库文件才能运行BusyBox。  Busybox Library Tuning --->      [*] vi-style line editing commands选上VI风格的行编辑器命令。      [*] Fancy shell prompts  Installation Options ("make install" behavior)  --->      (/home/gec/build_rootfs/rootfs) BusyBox installation prefix //安装目标路径Linux Module Utilities --->        [ ] Simplified modutils        [*] insmod        [*] rmmod        [*] lsmod        [*] modprobe        [*] depmod取消选中Simplified modutils,使用完整的模块工具命令:insmod、rmmod……
View Code

  确保支持mdev(mdev是udev设备文件系统的精简版),确保以下几项被选中:

Linux System Utilities ---> [*] mdev        [*] Support /etc/mdev.conf        [*] Support subdirs/symlinks        [*] Support regular expressions substitutions when renaming dev       [*] Support command execution at device addition/removal        [*] Support loading of firmwares
View Code

  其它选项都是一些基本命令选项,自己需要哪些命令就编译进去,一般用默认的就可以了,配置好后退出并保存。

  4.编译BusyBox,并安装。

编译:# make -j2         // j2表示创建两个线程进行编译安装:# make install
View Code

  在busybox-1.20.2目录下可以找到_install子目录,这就是刚才的安装目录。

 

下面的操作在rootfs目录进行

3)拷贝交叉编译器里的动态链接库到lib目录

  只需要拷贝交叉编译器里的动态链接库及其软链接到lib目录就好了,静态链接库不用拷贝:

# cp /usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/armv4t/lib/*so* lib -rdf
View Code

  注意:使用cp工具拷贝链接一定要使用d选项,表示拷贝的文件带链接属性。

4)对lib目录下的动态链接库进行裁剪

  动态链接库包括了符号信息,可以去掉不必要的符号信息,使用动态链接库变得更小巧:

# arm-none-linux-gnueabi-strip lib/*so*
View Code

5)修改脚本文件

  1.etc/inittab文件是启动流程文件。

#vi etc/inittab内容:::sysinit:/etc/init.d/rcS::askfirst:/bin/sh    //::respawn:/bin/bash::once:/etc/local.rc::ctrlaltdel:/sbin/reboot::shutdown:/bin/umount -a -r::restart:/sbin/init
View Code

  2./etc/init.d/rcS脚本。

#vi etc/init.d/rcS内容:#!/bin/shexport PATH=/sbin:/bin:/usr/sbin:/usr/bin        //设置变量PATHmount -a                                    //mount -a会读取etc/fstab完成文件系统挂载echo /sbin/mdev > /proc/sys/kernel/hotplug           //当内核有热插拨事件时调用/sbin/mdevmdev -s                                      //启动mdev#ifconfig eth0 192.168.0.80               //配置以太网接口0的IP地址
View Code

  3.etc/fstab文件。

# 
proc /proc proc defaults 0 0 sysfs /sys sysfs defaults 0 0 tmpfs /dev tmpfs defaults 0 0 tmpfs /tmp tmpfs defaults 0 0 tmpfs /dev tmpfs defaults 0 0
View Code

  /proc目录挂载了procfs文件系统,/sys目录挂载了sysfs文件系统,var和tmp及dev目录挂载的是tmpfs临时文件系统。

  创建mdev.conf文件:

touch /rootfs/etc/mdev.conf
View Code

  附:修改好的etc目录:

  http://pan.baidu.com/s/1pJ4sX2j

6)设置动态库的加载路径

  修改 etc/init.d/rcS ,添加:

export LD_LIBRARY_PATH=/mylib:$LD_LIBRARY_PATH
View Code

7)添加bash

  1.配置,编译,生成。

配置bash:#./configure   --host=arm-linux编译:#make生成:#make install 得到bash    -----> 放到开发板文件系统的/bin目录下,检查该程序所需的动态库是否具备
View Code

  2.修改inittab脚本

#!/bin/bash::askfirst:/bin/bash
View Code

  3.修改其他脚本的声明

#!/bin/sh    -->  #!/bin/bash
View Code

  4.添加etc/profile  ---->  启动bash时系统默认的执行脚本

# Ash profile# No core files by defaultulimit -S -c 0 > /dev/null 2>&1USER="`id -un`"LOGNAME=$USERPS1='[\u@\h \W]# 'PATH=$PATHHOSTNAME=`/bin/hostname`    export USER LOGNAME PS1 PATHexport LD_LIBRARY_PATH=lib:/usr/lib:$LD_LIBRARY_PATH
View Code

 

四、构建根文件系统镜像

  1.获取mkyaffs2image工具的源码包

  下载地址:

  2. 编译mkyaffs2image工具

# tar xvf yaffs2-source.tar# cd yaffs2/utils# make # cp mkyaffs2image /usr/local/bin/
View Code

  3.制作根文件系统镜像

  进入/root目录

# mkyaffs2image  rootfs  rootfs.img
View Code

五、根文件系统镜像rootfs.img下载与烧写

  下面的操作在开发板复位后的u-boot下载阶段进行:

SMDKV210 # nand erase 0xe00000 0xF200000SMDKV210 # tftp 0x40000000 rootfs.imgSMDKV210 # nand write.yaffs 0x40000000 0xe00000 0x6aa340 (要把最后一个数字改为实际u-boot下载传输的字节数)SMDKV210 # set bootargs root=/dev/mtdblock4 rootfstype=yaffs2  rw console=ttySAC0,115200
View Code

 

转载于:https://www.cnblogs.com/achsnw/p/4029722.html

你可能感兴趣的文章
TensorFlow2-维度变换
查看>>
Redux源码分析之createStore
查看>>
POJ 2060 最小路径覆盖
查看>>
label标签作用
查看>>
Selenium2之Web自动化编写配置(Java)
查看>>
windown快速安装xgboost
查看>>
tarjan(缩点)
查看>>
Lombok插件
查看>>
Linux上安装Libssh2
查看>>
自定义EL函数
查看>>
stm32的电源
查看>>
splice的多种用法
查看>>
20162304 2017-2018-1 《程序设计与数据结构》第二周学习总结
查看>>
九.python面向对象(双下方法内置方法)
查看>>
2018-09-12
查看>>
go:channel(未完)
查看>>
[JS]递归对象或数组
查看>>
CSS与Theme的作用——Asp.Net
查看>>
LeetCode(17) - Letter Combinations of a Phone Number
查看>>
20165115 2017-2018-2 《Java程序设计》第四周学习总结
查看>>