free-electrons linux内核和驱动
操作系统的三个作用:1、管理硬件资源;2、提供独立于架构和硬件的可移植的软件接口3、处理不同应用对相同硬件资源的同时访问
系统调用接口是稳定的,系统调用由c函数库封装,用户程序基本不需要直接调用系统函数。
linux系统通过虚拟文件系统向用户空间提供系统和内核信息,虚拟文件系统允许应用程序访问实际存储空间不存在的文件和目录,虚拟文件系统由内核动态创建。
最重要的两个虚拟文件系统是/proc 和/sysfs这两个文件系统
proc挂载在/proc目录下,提供操作系统的一些信息如进程信息和内存参数管理等
sysfs挂载在/sys目录下,是一系列设备和总线的信息。
Linux内核主要由进程调度(SCHED)、内存管理(MM)、虚拟文件系统(VFS)、网络接口(NET)和进程间通信(IPC)等5个子系统组成。
内核编译使用了GCC的一些扩展。所以标准ansi C编译器是不能编译内核的,内核开发不能使用C库,而是使用自包含的函数集。
不要在内核开发中使用浮点数,因为内核可能运行在不支持浮点数的架构上。
不要被与浮点数相关的内核配置选项所迷惑,
在用户空间的进程内进行浮点操作的时候,内核会完成从整数操作到浮点数操作的模式转换。在执行浮点指令时到底会做些什么,因体系结构不同,内核的选择也不同,但是,内核通常捕获陷阱并着手于整数到浮点方式的转变。
与用户空间进程不同,内核并不能完美地支持浮点操作,因为它本身不能陷入。 在内核中使用浮点数时,除了要人工保存和恢复浮点寄存器,还有其他一些琐碎的事情要做。如果要直截了当地回答,那就是:别这么做了,除了一些极少的情况,不要在内核中使用浮点操作。
不同于用户空间API,内核内部的API是会变化的,为这个内核版本编写的驱动可能不能在另一个版本运行。
内和开发没有内存保护机制,并且它的栈空间大小是固定的,内核控件内存是不能交换的。
发布一个包含商业性驱动的二进制内核是非法的,而商业驱动模块则要看情况了,比如说Nvidia图形驱动,它在驱动和内核之间有个中间层。不清楚到底合不合法。
某些情况下,驱动可以在用户空间实现,使用的条件是:
1、内核提供直接访问硬件的机制
2、There is no need to leverage an existing kernel subsystem such as the networking stack or lesystems.
3、内核不需要处理并发访问硬件,只会有一个应用程序实例会访问该硬件
可能的用户空间设备驱动
USB with libusb, http://www.libusb.org/
SPI with spidev, Documentation/spi/spidev
I2C with i2cdev, Documentation/i2c/dev-interface
Memory-mapped devices with UIO, including interrupt handling, Documentation/DocBook/uio-howto/
某些设备驱动一部分在用户空间实现,一部分在内核空间实现(printers, scanners, 2D/3D graphics acceleration)
用户空间驱动程序可以用各种语言编写,可以不开源,可以被杀死,不会导致系统崩溃,可以被交换出内存,可以使用浮点运算。
free-electrons linux内核和驱动的更多相关文章
- Linux内核USB驱动【转】
本文转载自:http://www.360doc.com/content/12/0321/14/8363527_196286673.shtml 注意,该文件是2.4的内核的驱动源文件,并不保证在2.6内 ...
- linux内核,驱动,应用程三者的概念和之间的关系
驱动程序属于内核的一个部分.准确的说是内核的一个组件.不包含驱动的内核也叫做内核,并且这也是我们常说的内核.内核要干的事情无非5件. 1,内存管理 2,虚拟文件系统 3,进程调度 4,网络接口 5,进 ...
- Linux 内核USB 驱动
通用串行总线(USB)是一个在主机和许多外设之间的连接. 最初它被创建来替代许多慢速和不同的总线- 并口, 串口, 和键盘连接--有一个单个的所有设备都可以连接的总线类型.[45] USB 已经成长超 ...
- linux 内核(驱动)常用函数
2.4.1 内存申请和释放 include/linux/kernel.h里声明了kmalloc()和kfree().用于在内核模式下申请和释放内存. void *kmalloc(unsigned ...
- Linux内核触摸屏驱动--多点触摸 【转】
转自:http://blog.chinaunix.net/uid-24227137-id-3127126.html 简介 为了使用功能强大的多点触控设备,就需要一种方案去上报用户层所需的详细的手指 ...
- Linux 内核设备驱动
设备模型跟踪所有对系统已知的驱动. 这个跟踪的主要原因是使驱动核心能匹配驱动和新 设备. 一旦驱动在系统中是已知的对象, 但是, 许多其他的事情变得有可能. 设备驱动可 输出和任何特定设备无关的信息和 ...
- Linux内核和驱动编译常见问题
1.获取内核源码应为 git clone depth=1 不然编译时会报错 2.有些RTL188CUS网卡与wpa_supplicant兼容有问题 更新wpasupplicant或许能解决 这里用i ...
- linux内核中驱动开发常见的相似多态
#include<stdio.h> #include<stdlib.h> struct test { char name[20]; void (*func)(char *); ...
- 如何查看linux内核中驱动的初始化顺序?
答:通过生成的System.map可以查看到,主要关注__initcall_<module_entry_function>_init<level>,如: __initcall_ ...
随机推荐
- oracle驱动问题
转载 http://sosuny.iteye.com/blog/806390
- C#pdf 切割成图片
引用 using Ghostscript.NET;using Ghostscript.NET.Rasterizer; 需要安装 exe文件 public static GhostscriptVersi ...
- input 放大镜
<input results="s" type="search" size="20px" placeholder="搜 ...
- amqp事务
摘要: 介绍confirm的工作机制.使用spring-amqp介绍事务以及发布确认的使用方式.因为事务以及发布确认是针对channel来讲,所以在一个连接中两个channel,一个channel可以 ...
- 通过innobackupex实现对MySQL的完整备份与还原
备份 新建一个用于存放备份的目录 mkdir /backup 执行以下命令: innobackupex --password=test /backup/ 执行完后你会看到“completed OK!” ...
- Tomcat并发数优化,修改service.xml性能调优 增加最大并发连接数
可以在控制台的启动信息里看见,默认状态下没有被打开nio配置,启动时的信息,如下: 2010-2-1 12:59:40 org.apache.coyote.http11.Http11Protocol ...
- WPF打印、预览、导出PDF
本人很懒,已找到可使用样例 例: http://www.cnblogs.com/guogangj/archive/2013/02/27/2934733.html
- 318. Maximum Product of Word Lengths
Given a string array words, find the maximum value of length(word[i]) * length(word[j]) where the tw ...
- VC++ 两种动态调整控件位置的方法(CButton设置为Radio形式会出现错误)
((CButton*)GetDlgItem(IDC_CHECK1))->MoveWindow(, cy - , , ); ((CButton*)GetDlgItem(IDC_CHECK2))-& ...
- 一步一步学WebSocket(二) 使用SuperWebSocket实现自己的服务端
上一篇文章,我们了解了客户端如何与服务器创建WebSocket连接.但是一个巴掌拍不响,既然是通信,就必然最少要有两个端.今天我们来看看c#如何用已有的框架实现一个WebSocket服务端. 在.Ne ...