编写嵌入式Linux应用层驱动程序
在研究某一样东西的时候,其实最重要的一点就是了解清楚它的作用,它对自己有没有用,以前刚刚进入大学的时候总是听某某师兄师姐在讲某个课程没啥用,不用认真学,结果自己有时候也把某些人的某些话当真了,再结果我在学习某些课程的时候就没把它当回事,总认为以后没什么用,等到自己大四时才知道那些个所谓的师兄师姐们的脑袋都是被驴给踢过的,当发现最重的东西自己曾经视为无用时,为时晚也…所以在此建议读者以后搞任何东西前都先了解它的用处,对自己有没有用。如果真的是没有用的东西,又何必花费时间在这上面,还不如去当公务员呢。
一. 为什么我们有时会在内核级做driver?有时却在应用层做driver?
让我们一起来看《linux device driver》如何回答我们的。
一个第一次涉及内核问题的 Unix 程序员, 可能会紧张写一个模块. 编写一个用户程序来直接读写设备端口可能容易些.
确实, 有几个论据倾向于用户空间编程, 有时编写一个所谓的用户空间设备驱动对比钻研内核是一个明智的选择. 在本节, 我们讨论几个理由, 为什么你可能在用户空间编写驱动. 本书是关于内核空间驱动的, 但是, 所以我们不超越这个介绍性的讨论.
用户空间驱动的好处在于:
· 完整的 C 库可以连接. 驱动可以进行许多奇怪的任务, 不用依靠外面的程序(实现使用策略的工具程序, 常常随着驱动自身发布).
· 程序员可以在驱动代码上运行常用的调试器, 而不必走调试一个运行中的内核的弯路.
· 如果一个用户空间驱动挂起了, 你可简单地杀掉它. 驱动的问题不可能挂起整个系统, 除非被控制的硬件真的疯掉了.
· 用户内存是可交换的, 不象内核内存. 一个不常使用的却有很大一个驱动的设备不会占据别的程序可以用到的 RAM, 除了在它实际在用时.
· 一个精心设计的驱动程序仍然可以, 如同内核空间驱动, 允许对设备的并行存取.
· 如果你必须编写一个封闭源码的驱动, 用户空间的选项使你容易避免不明朗的许可的情况和改变的内核接口带来的问
相关文档:
umask()函数:此函数的主要作用是在创建文件时设置或者屏蔽掉文件的一些权限。一般与open()函数配合使用。open函数原型:
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
int open( const char * pathname, int flags);
int open( const char ......
Linux系统下,需要大量的命令行选项,如果自己手动解析他们的话实在是有违软件复用的思想,不过还好,GNU C library留给我们一个解析命令行的接口(X/Open规范),好好使用它可以使你的程序改观不少。
使用getopt_long()需要引入头文件
#include <getopt.h>
现在我们使用一个例子来说明它 ......
统计某文件夹下文件的个数
ls -l |grep "^-"|wc -l
统计某文件夹下目录的个数
ls -l |grep "^d"|wc -l
统计文件夹下文件的个数,包括子文件夹里的。
ls -lR|grep "^-"|wc -l
统计文件夹下目录的个数,包括子文件夹里的。
ls -lR|grep "^d"|wc - ......
< type="text/javascript">
document.body.oncopy = function() {
if (window.clipboardData) {
setTimeout(function() {
var text = clipboar ......