嵌入式的设备驱动层

来源:互联网 发布:淘宝联盟不能自推自买 编辑:程序博客网 时间:2024/04/28 08:33

一.嵌入式的软件分类按照软件使用的资源以及所要承担的任务可以分成三种:系统软件。应用软件。支撑软件

其中系统软件主要是系统硬件设备的驱动程序,嵌入式操作系统,还有各种中间件

支撑软件是辅助开发的工具软件,一般是用于软件开发的阶段。


二.嵌入式的设备驱动层是在硬件和操作系统中间的一层,他直接对系统的硬件进行管理和控制,并为上层提供驱动支持。

在嵌入式系统中这一层也叫做BSP层(板间支持包),它一般是针对某个特定的单板来设计的。所以在实际的开发过程中,通常是可以找到一个与自己硬件系统对应的一个演示版的BSP,在此基础上进行修改和完善。

BSP主要是包括Bootloader(引导加载程序)和设备驱动程序两方面的内容。

三.文件系统。包括根文件系统和建立于Flash内存设备之上文件系统。通常用ramdisk来作为rootfs。



问题

项目的根文件系统是挂载在哪里:

 # df

  Filesystem 1K-blocks Used Available Use% Mounted on

  /dev/hda2 16216016 5667* 9724600 37% /   根

  /dev/hda1 101089 9321 8*9 10% /boot

  none 63028 0 63028 0% /dev/shm

根文件系统是用什么文件?

2.roofs这块内存区域是有bootload还是是由内核划分出来?

3.根文件系统系统位于那个存储介质上?

6内核启动和加载根文件系统的顺序关系,内核是在什么时候挂载根文件系统并开始访问根文件系统下的文件


4

当我们在Windows下,提到文件系统时,你的第一反应是想到的是什么?是不是Windows下的一些Fat32、NTFS等的文件系统的类型。而在Linux中,你可能会想到Ext2、Ext3,但你还必须要有一个根文件系统的概念。根文件系统首先是一种文件系统,该文件系统不仅具有普通文件系统的存储数据文件的功能,但是相对于普通的文件系统,它的特殊之处在于,它是内核启动时所mount的第一个文件系统,内核代码的映像文件保存在根文件系统中,系统引导启动程序会在根文件系统挂载之后从中把一些初始化脚本(如rcS,inittab)和服务加载到内存中去运行。我们要明白文件系统和内核是完全独立的两个部分。在嵌入式中移植的内核下载到开发板上,是没有办法真正的启动Linux操作系统的,会出现无法加载文件系统的错误。
那么根文件系统在系统启动中到底是什么时候挂载的呢?先将/dev/ram0挂载,而后执行/linuxrc.等其执行完后。切换根目录,再挂载具体的根文件系统.根文件系统执行完之后,也就是到了Start_kernel()函数的最后,执行init的进程,也就第一个用户进程。对系统进行各种初始化的操作。如果要能明白这里的过程的话,可要好好的看看Linux内核源码了。

5在Linux文件系统中,EXT2文件系统、虚拟文件系统、/proc文件系统是三个具有代表性的文件系统。


关于第三个问题,你可以看看
kernel_source/usr/*
init/initramfs.c
在初始化的时候内核会加载由usr/gen_init_cpio
生成的类似于ram disk的文件系统



ramdisk一个作用就是用来解决boot过程中mount根文件系统的“先有鸡还是先有蛋”的问题的。
一般来说,根文件系统在形形色色的存储设备上,不同的设备又要不同的硬件厂商的驱动,比如intel的南桥自然需要intel的ide/sata驱动,VIA的南桥需要VIA的ide/sata驱动,根文件系统也有不同的文件系统的可能,比如ubuntu发行版可能一般用ext3,suse可能就不是了,不同的文件系统也需要不同的文件系统模块;假如把所有驱动/模块都编译进内核,那自然没问题,但是这样就违背了“内核”的精神或本质,所以一般来说驱动/模块都驻留在根文件系统本身上/lib/modules/xxx,那么“鸡蛋”问题就来了,现在要mount根文件系统却需要根文件系统上的模块文件,怎么办?于是,就想出ramdisk,内核总是能安装ramdisk的,然后把所有可能需要的驱动/模块都放在ramdisk上,首先,让内核将ramdisk当作根文件系统来安装,然后再用这个根文件系统上的驱动来安装真正的根文件系统,就将这个矛盾问题解决了

0 0
原创粉丝点击