[150312]linux内核,驱动,应用程三者的概念和之间的关系

http://zhidao.baidu.com/link?url=TZ14V5nI4ba0Ym2KcT08PesVpijMO0F6wWQ5JkYtV_NGtB5d0VBr6u4pcBcE2u29kNcN9kuZ-pHGV94aOpUSCa


Q:我知道三者是怎么下载到开发板的,linux内核是编译以后利用u-boot下载到开发板的,那驱动程序是单独下载的还是编译好后放在linux内核中一起随内核编译下载的还是其它的什么,应用程序编译好后放在内核中还是单独下载到开发板的,要是单独下载的话那它们之间的下载顺序是怎么样的。本菜鸟也是刚学linux 嵌入式,我觉得怎么样写代码这不重要,重要的是弄清楚一些概念,很多书只讲了怎样写代码,怎么移植,但不知道如何下载。

 

 A:1、首先楼主脑子中要有个概念 U-BOOT(BOOTLOADER)   LINUX内核(一般包含驱动,也就是和内核一起编译好后下载到板子中) 文件系统(包含用户应用程序等)这三个重要部分是按照预先设定好的位置放置于NAND FLASH(我这里就不说BOOTLOADER放在NOR FLASH,从NOR 启动了),板子上电后直接运行BOOTLOADER,BOOTLOADER 根据预先设置好的位置 把LINUX内核加载到内存,并将控制权交给LINUX内核,内核利用文件系统驱动(比如YAFFS驱动等)来从NANDFLASH中操作文件系统。

2、应用程序是放在文件系统(比如YAFFS文件系统)中的,所以应用程序不放在内核中,而是放在文件系统中,制作成文件系统一并下载到NAND FLASH中(或者通过其它途径把文件拷贝到该文件系统中)。

 

Q:文件系统编译好后单独利用U-Boot下载到开发板中的吗,是不是U-BOOT已经把nand flash分区好了,先将内核下载到一个分区,再下载文件系统啊,另外应用程序是编译好后放在文件系统的哪个文件夹中,还是将应用程序源文放到文件系统中一起编译,如果是这样那放到文件系统的哪个文件夹下?

 

A:是的,需要单独下载到开发板中,分区是事先根据各个大小确定好位置后,然后BOOTLOADER和内核的分区里面一致不冲突就可以了。你可以先下载文件系统后在下载内核,不冲突。因为现在已经对这两块内容固定起始位置了。先下载哪个都无所谓。


Q:内核跟驱动有什么关系?


A: 这个问法好笼统.
       据我读代码的理解,驱动的任务:
1)驱动利用内核文件系统层的接口,提供接口给用户层操控硬件.ioctl/dev/sysfs等
2)驱动提供硬件实际上的“操作窗口”给内核使用。比如说内核要关闭设备,文件系统层处理了.close操作,驱动层负责写入指定的值给设备的特定寄存器来关闭设备。

  所以我的理解驱动层是硬件设备的一层抽象层,它也是内核的一个子系统,提供接口供内核其他子系统来操控硬件.


A2:脑袋和手的关系吧。


A3:1.从功能角度来说的话,驱动在内核的下层。即:硬件,驱动,内核,应用(从下往上)。也就是说,驱动直接操作硬件,来给内核提供服务。内核不能直接操作硬件。
2.从代码结构的角度来看,驱动和内核实际上已经融为一体,驱动开发就是内核开发,内核开发很多时候也指驱动开发。还记得内核模块吗?为什么会提供内核模块这种形式,即module_init和module_exit这种形式。你看下驱动开发的书籍,驱动全部都是以内核模块这种形式来实现的。这就说明驱动开发实际就是内核开发,而内核模块这种形式,说白了本身也就是为了开发驱动才搞出来的。驱动已经成为内核的一部份了,内核源码的70%以上都是驱动的代码,剩下的代码说白了就是进程管理,内存管理,文件管理,这些部分所有系统都公用,所以只占到30%。而外设的发展是日新月异的,数量太多了。新的外设必须要有相应的驱动,所以内核部分的发展主要就是驱动的发展。
  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值