linux驱动-如何在linux2-6-18以后的内核中实现原子操作

问题描述

如何在linux2-6-18以后的内核中实现原子操作

近来遇到一个比较棘手的问题,做一个设备的驱动,内核选用的是linux2.6.18内核,驱动中有一个计数操作,想用原子操作来实现,不过发现内核中已经没有automic相关类型与函数,经查询得知linux在2.6.18之后移除了asm/automic.h文件导致无法使用内核中automic来实现原子计数。特来此请教坛中的大牛们在2.6.18以后的内核模块中如何实现原子计数?

解决方案

没有了atomic_t,这不太可能吧。内核中有很多子系统依赖于atomic_inc/dec,比如说rcu+引用计数,不会没有的。

时间: 2024-09-15 11:21:41

linux驱动-如何在linux2-6-18以后的内核中实现原子操作的相关文章

《Android深度探索(卷1):HAL与驱动开发》——6.3节第一个Linux驱动:统计单词个数

6.3 第一个Linux驱动:统计单词个数Android深度探索(卷1):HAL与驱动开发源程序目录:<光盘根目录>/sources/word_count本节将给出我们的第1个Linux驱动的例子.这个驱动程序并没有访问硬件,而是利用设备文件作为介质与应用程序进行交互.应用程序通过向设备文件传递一个由空格分隔的字符串(每一个被空格隔开的子字符串称为一个单词),然后从设备文件读出来的是该字符串包含的单词数.本例的驱动程序使用C语言实现,源代码文件路径如下. 6.3.1 编写Linux驱动程序前的

linux驱动开发--字符设备:原子操作

解决竞态问题的途径是保证对共享资源的互斥访问,所谓互斥访问是指一个执行单元在访问共享资源的时候,其他的执行单元被禁止访问. 访问共享资源的代码区域称谓临界区(critical sections),临界区需要以某种互斥机制加以保护.中断屏蔽.原子操作.自旋锁和信号量是Linux设备驱动中可采用的互斥途径. 原子操作 原子操作指的是在执行过程中不会被别的代码路径所中断的操作. Linux内核停工了一系列函数来实现内核中的原子操作.这些函数分为两类,分别针对位和整型变量进行原子操作.他们的共同点是在任

Linux驱动技术(八) _并发控制技术

为了实现对临界资源的有效管理,应用层的程序有原子变量,条件变量,信号量来控制并发,同样的问题也存在与驱动开发中,比如一个驱动同时被多个应用层程序调用,此时驱动中的全局变量会同时属于多个应用层进程的进程空间,这种情况下也要使用一些技术来实现对并发的控制.本文将讨论内核中下述并发控制技术的技术特点和应用场景. 1.中断屏蔽 2.原子操作  a.原子变量操作  b.原子位操作 3.自旋锁  a.传统自旋锁  b.读写自旋锁  c.顺序锁  d.RCU 4.信号量  a.传统信号量  b.读写信号量  

linux内核-如何安装一个没UI的linux2.6.18内核?

问题描述 如何安装一个没UI的linux2.6.18内核? 操作系统大作业要求编写一些内核模块,内核要求为2.6.18版本,不能有图形界面. 想请教下该在什么系统上面装这个内核呢? 小弟在最新Ubuntu版本上装了2.6.18,可是进不去,而且也有界面.我是不是应该找个老版本点的CentOS来装呢,求指教. 解决方案 自己编译一个内核就是没有GUI的,如果实在想用Ubuntu可以删掉X Window 解决方案二: 有UI 的直接在代码中把UI屏蔽了就可以了啊,一般发布的Ubuntu都是带UI的

【Linux驱动】linux内核模块简介

一. 摘要 这篇文章主要介绍了Linux内核模块的相关概念,以及简单的模块开发过程.主要从模块开发中的常用指令.内核模块程序的结构.模块使用计数以及模块的编译等角度对内核模块进行介绍.在Linux系统开发过程中,以模块的形式开发其重要性不言自明,而在嵌入式设备驱动开发中将驱动程序以模块的形式发布,更是极大地提高了设备使用的灵活性--用户只需要拿到相关驱动模块,再插入到用户的内核中,即可灵活地使用你的设备. 二. 文章提纲 1. 摘要 2. 文章提纲 3. 概述 4. 模块开发常用的指令 5. 内

Linux驱动之挂在SD卡

      讲解之前我得说一下,现在有一个新的技术在公司已经在用了,远远比你在学校学的东西要先进一点,我们烧写u-boot程序一般是在flash上,然后由flash中的程序来引导linux内核,但是flash成本远远比SD卡要高,现在公司很多都用SD卡来代替flash,这个具体怎么实现,还得自己去学习,我目前也不是很熟悉这个新的技术,就不写出来了,等我熟悉以后再写出来分享吧. Linux中对S3C2440 SD驱动已经支持的非常好.为了让FL2440支持2G以上的SD卡,只需要完成几个步骤即可.

Davinci DM6446开发攻略——linux-2.6.18移植

 TI DAVINCI 使用最新的内核是montavista linux-2.6.18,之前说过,国内很多公司,包括开发板的软件包,一直在使用montavista linux-2.6.10,这个版本准确来说是比较低的,实时性肯定没2.6.18好(MontaVista Linux Professional Edition 5.0以linux-2.6.18为基础,打破了Linux不适用于实时和嵌入式应用的迷思):使用devfs,没有使用udev:对DM365等新出的DAVINCI芯片支持限度很小:u

【Linux驱动】字符设备驱动

一.linux系统将设备分为3类:字符设备.块设备.网络设备.使用驱动程序: 1.字符设备:是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后数据.字符设备是面向流的设备,常见的字符设备有鼠标.键盘.串口.控制台和LED设备等. 2.块设备:是指可以从设备的任意位置读取一定长度数据的设备.块设备包括硬盘.磁盘.U盘和SD卡等. 每一个字符设备或块设备都在/dev目录下对应一个设备文件.linux用户程序通过设备文件(或称设备节点)来使用驱动程序操作字符设备

linux驱动加载后能找到设备,但是/dev下不能找到设备文件

问题描述 linux驱动加载后能找到设备,但是/dev下不能找到设备文件 linux驱动加载后能找到设备,但是/dev下不能找到设备文件,我用的是动态分配设备号,insmod也能通过,但是/dev下就是找不到设备文件,加载后也不能通过测试程序我基本上直接用的板子例程,静态动态我都试了,就是不行,日志文件里面也什么都没有,板子是2410的,主机是红帽的,希望大神能够指点迷津/*****************************************Copyright (c)********