历史上的今天
返回首页

历史上的今天

今天是:2024年12月16日(星期一)

正在发生

2021年12月16日 | Exynos4412 文件系统制作(三)—— 文件系统移植

2021-12-16 来源:eefocus

根文件系统一直以来都是所有类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,删除不需要的库文件。

推荐阅读

史海拾趣

Goldstar Electron Co Ltd公司的发展小趣事

对于27MHz晶体振荡器电路,网友可能会提出多种问题,以下是一些常见问题及其详细回答:

一、电路设计相关问题

  1. 如何设计一个简单的27MHz晶体振荡器电路?
    • 回答:设计一个简单的27MHz晶体振荡器电路通常包括晶体本身、两个反馈电容、一个或多个电阻以及可能的放大元件(如晶体管或集成电路中的振荡器部分)。例如,可以使用一个并联型晶体振荡器电路,其中晶体与两个电容形成谐振电路,并通过一个放大元件(如CMOS反相器)提供正反馈以维持振荡。具体设计可参考技术资料(如华强电子网)提供的电路图,并根据实际需要进行调整。
  2. 如何选择合适的反馈电容和电阻值?
    • 回答:反馈电容和电阻的选择对振荡器的稳定性和频率精度至关重要。电容值通常根据晶体的规格和所需的振荡频率来确定,而电阻值则用于限制放大器的增益,以防止振荡器过度放大并产生不稳定现象。选择时,建议参考晶体振荡器的数据手册或相关设计指南,并结合实验测试来找到最佳值。

二、电路性能相关问题

  1. 如何减少27MHz晶体振荡器的谐波失真?
    • 回答:谐波失真通常是由于电路中的非线性元件或设计不当引起的。为了减少谐波失真,可以采取以下措施:
      • 选择低谐波失真的晶体振荡器。
      • 在电路中添加低通滤波器以滤除高频谐波。
      • 优化电路设计,减少非线性元件的使用,并确保电路元件的匹配性。
  2. 如何提高27MHz晶体振荡器的频率稳定性?
    • 回答:频率稳定性受多种因素影响,包括晶体的物理特性、环境温度、电源电压波动等。提高频率稳定性的方法包括:
      • 选择高质量的晶体振荡器,确保其具有较低的频率漂移和温度系数。
      • 在电路中添加温度补偿电路,以抵消温度变化对频率的影响。
      • 使用稳定的电源电压,并在必要时添加电压稳压器。
      • 优化电路布局和接地设计,减少电磁干扰和噪声。

三、电路调试与测试相关问题

  1. 如何调试27MHz晶体振荡器电路以确保其正常工作?
    • 回答:调试晶体振荡器电路时,可以按照以下步骤进行:
      • 检查电路连接是否正确,确保所有元件都已正确安装。
      • 使用示波器观察振荡波形,确认其频率和幅度是否符合要求。
      • 调整反馈电容和电阻值,以优化振荡器的性能和稳定性。
      • 检查电源电压和电流是否稳定,并调整至推荐值。
      • 如果发现谐波失真或其他问题,根据具体情况采取相应的解决措施。
  2. 如何测试27MHz晶体振荡器的输出频率和相位噪声?
    • 回答:测试晶体振荡器的输出频率和相位噪声通常需要使用专业的测试设备,如频率计和相位噪声分析仪。测试时,将振荡器的输出连接到测试设备的输入端,并设置适当的测试参数。通过测试设备可以准确测量振荡器的输出频率和相位噪声水平,从而评估其性能是否符合要求。

四、其他常见问题

  1. 27MHz晶体振荡器适用于哪些应用场景?
    • 回答:27MHz晶体振荡器由于其较高的频率和较好的稳定性,广泛应用于无线通信、雷达系统、电子测量仪器等领域。在这些应用场景中,晶体振荡器作为时钟源或频率基准,为系统提供稳定的频率信号。
  2. 如何延长27MHz晶体振荡器的使用寿命?
    • 回答:延长晶体振荡器的使用寿命需要注意以下几点:
      • 避免在极端温度或湿度条件下使用。
      • 保持电源电压稳定,避免频繁波动。
      • 定期检查电路连接和元件状态,及时更换损坏的元件。
      • 避免机械冲击和振动对晶体振荡器的影响。
      • 选择质量可靠、性能稳定的晶体振荡器产品。
HALO Electronics公司的发展小趣事

鸿展光电(GPO)公司的发展故事

故事一:初创与定位

深圳市鸿展光电有限公司(GPO)成立于2009年6月12日,起初便定位于高端显示技术的研发与生产。公司创始人凭借对电子行业未来趋势的敏锐洞察,决定专注于玻璃盖板(CG)、外挂式液晶显示模组(LCM)、外挂式触控模组(TP)等产品的研发与生产。在成立初期,面对激烈的市场竞争,鸿展光电凭借高质量的产品和优质的服务,逐步在行业内站稳脚跟。随着技术团队的不断壮大和产品的持续优化,公司迅速成长为一家集研发、生产、销售于一体的国家级高新技术企业。

故事二:技术突破与创新

在发展过程中,鸿展光电始终将技术创新视为企业发展的核心动力。公司不断加大研发投入,积极引进国内外先进技术和设备,致力于提升产品的技术含量和附加值。特别是在内嵌式触控显示一体化模组(INCELL、ONCELL)以及新一代触控显示模组(MiniLED、MicroLED、AMOLED)等领域,鸿展光电取得了多项关键性技术突破,并成功将这些技术应用于实际生产中,进一步巩固了公司在行业内的领先地位。

故事三:市场拓展与品牌建设

随着产品线的不断丰富和技术实力的不断提升,鸿展光电开始积极拓展国内外市场。公司通过参加各类行业展会、举办技术交流会等方式,不断提升品牌知名度和影响力。同时,鸿展光电还积极与国内外知名企业建立合作关系,共同开发新产品、新技术,实现互利共赢。这些举措不仅为公司带来了更多的商业机会,也进一步提升了公司的市场地位和品牌价值。

故事四:产能扩大与效率提升

为了满足日益增长的市场需求,鸿展光电在扩大产能方面进行了不懈努力。公司通过优化生产流程、引进先进生产设备、提升员工技能水平等措施,不断提升生产效率和产品质量。同时,公司还加强了供应链管理,确保原材料的稳定供应和成品的及时交付。这些举措不仅有效提升了公司的产能和竞争力,也为公司的长期发展奠定了坚实基础。

故事五:社会责任与可持续发展

在追求经济效益的同时,鸿展光电也积极履行社会责任,推动企业的可持续发展。公司注重环境保护和节能减排工作,通过采用环保材料和节能技术、加强废水废气处理等措施,降低生产过程中的环境污染和资源消耗。此外,鸿展光电还积极参与公益事业和社会活动,为社会做出积极贡献。这些举措不仅提升了公司的社会形象和声誉,也为企业的长期发展注入了新的动力。

ESTEK公司的发展小趣事

随着国内市场的逐渐饱和,ESTEK公司开始将目光投向国际市场。公司制定了详细的国际化战略,通过参加国际展会、拓展海外销售渠道等方式,积极开拓国际市场。同时,ESTEK公司还积极引进国外先进的技术和管理经验,不断提升自身的竞争力和国际化水平。在国际市场上,ESTEK公司的产品逐渐获得了认可,公司的国际影响力也日益增强。

Compensated Devices Inc公司的发展小趣事

Compensated Devices Inc(简称CDI)最初是一家小型电子元件制造商,专注于生产高精度电阻器。随着科技的飞速发展,传统电阻器已无法满足新兴市场的需求。CDI的创始人李先生敏锐地洞察到这一点,决定投入大量资源进行研发,推出了具有温度补偿和自动校准功能的新型电阻器。这一创新产品迅速获得了市场的认可,CDI也因此逐渐在电子行业中崭露头角。

国盛科技(BOCHEN)公司的发展小趣事

国盛科技在发展过程中获得了多项认证与荣誉。例如,公司获得了知识产权管理体系认证证书,荣登《人民代表报》全国两会特刊,成为“中国质量万里行促进会”会员并获得“收录企业”荣誉称号等。这些认证与荣誉的获得,充分证明了国盛科技在电子行业的领先地位和企业实力的不断提升。

德尔创(Dersonic)公司的发展小趣事

面对不断变化的市场环境和客户需求,德尔创始终坚持可持续发展的理念。公司注重环境保护和资源节约,积极推行绿色生产和循环经济。同时,德尔创还加强了内部管理和团队建设,通过优化流程和提高效率来降低成本和提升效益。对于未来,德尔创已经制定了明确的发展规划和目标,将继续加大在技术研发、市场拓展和品牌建设等方面的投入力度,努力成为全球电子元器件行业的领军企业之一。

问答坊 | AI 解惑

转过来和大家一起分享 在别处看见的关于ZigBee的总结

ZigBee斗法的交点在哪里?          由于ZigBee技术是目前嵌入式应用的大热门,所以目前全世界很多公司陆续投入这个市场,市场上各种ZigBee的技术方案五花八门、争奇斗艳。但俗话说“外行看热闹,内 ...…

查看全部问答>

各位大虾 我是大二学生 如何提高c语言编程能力(大一学过C)

大家好 我是大二学生 学习嵌入式  大一学过C语言   但学的一般  现在大二  想在学习C 但是  怎样提高呢? 以前学的也就是  一些很简单的 类似抄代码的    如何才能明显的提 ...…

查看全部问答>

ARM单片机串口数据寄存器不能读写的问题

我直接给串口数据寄存器赋值(如0X31),在调试过程中该寄存器一直为0,不知到底哪里出问题,帮帮啊。…

查看全部问答>

wince5.0与sqlce

将程序下载到开发板上时,程序找不到 system.data.sqlserverce程序集? 在开发板已经装上了相应的sqlce程序!!!! 请问在系统定制时是不是还得添加相应的数据库链接文件????…

查看全部问答>

51单片机输入口吸收电流大如何设置?

我在用AT89C2051做个小装置。输入口高电平有效。所以在程序的开始将输入口置零,但是发现吸收电流较大,只有加一级三极管放大电流才能正常工作。有没有其它的方法解决?谢谢!!…

查看全部问答>

Unable to connect to the device

有个问题解决不了啊~~~ 已经安装了Microsoft   ActiveSync而且用USB接口和Pocket PC已经连接上了可以把文件Copy到Pocket   PC   上去; 可是我用上述点击“Test”按钮时就是连接不上Pocket PC,报错为“Unable  ...…

查看全部问答>

LM3S8962评估板原理图分析(连载中。。。)

最近有一个板子刚好要用到群星系列的MCU,看到坛子有这个活动,就认领了分析原理图的任务,和大伙一起讨论。 初步想法:把原理图分成几个模块,一步一步分析,先最小系统,再其他单元,最后单板接口。 我是ARM-Cortex-M3初学者,手上也没有这块板 ...…

查看全部问答>

用声卡测量电量

这里有一篇改装声卡做测量的文章,看看那位有兴趣试试看。本人菜鸟,没试过 http://www.qsl.net/om3cph/sb/dcwithsb.htm…

查看全部问答>

stm32flash编程手册

读写flash的说明  flash 寄存器说明 flash编程手册.pdf (237.27 KB) 下载次数:208 2010-6-23 20:30 …

查看全部问答>

请教:汇编调用C,不能执行for循环体内语句

代码如下: ;/*-----------------------------------------------------------------------*/ ;/*********实现从汇编语言中使用B或BL命令跳转到C语言程序的main()函数********/ ;/********************从main()函数调用delay()函数********** ...…

查看全部问答>