ldd3 驱动--测试scull

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

scull驱动模拟设备。编写读写设备的控制文件testscull.c向scull发送和接收数据。

1 安装scull.ko

  在ldd3驱动源码文件夹中,进入scull文件夹,make,生成scull.ko,运行其中的shell文件:scull_load,完成scull.ko的安装。

  # cd /sys/module/scull/parameters/

  #cat scull_major

  254

  #cat scull_minor

  0

  可知scull.ko的主次设备号为254 0

  进入/dev 创建设备文件:

  #cd /dev

  #mknod sculldev c 254 0

2 编写测试文件testscull.c

  代码:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<error.h>
#include<fcntl.h>
#include<sys/types.h>
int main()
{
  int fd,len;
  char inbuf[20];
  char outbuf[20]="scull dev test!";
  fd=open("/dev/sculldev",O_WRONLY);
  if(fd<0)
  {printf("Error openning the device of sculldev for writing!/n");
  exit(1);
  }
  len=write(fd,outbuf,strlen(outbuf)+1);
  if(len<0)
    { printf("Error writing to the device!/n");
      close(fd);
      exit(1);
   
    }
  printf("writing %d bytes to the device!/n",len);
  close(fd);
  fd=open("/dev/sculldev",O_RDONLY);
  if(fd<0)
  {
    printf("Error openning the device of sculldev for reading!/n");
    exit(1);
  }
  len=read(fd,inbuf,len);
  if(len<0)
    {printf("Error reading from the device!/n ");
     close(fd);
     exit(1);
    }
  printf("reading %d bytes from the device!/n",len);
  printf("%s/n",inbuf);

}

3 测试

#gcc testscull.c -o testscull

#./testscull

 

 

经过对scull_load的分析,其中包含了设备文件创建的代码,所以不用自己创建设备文件

#!/bin/sh
module="scull"
device="scull"
mode="664"
# invoke insmod with all arguments we got
# and use a pathname, as newer modutils don't look in . by default
/sbin/insmod ./$module.ko $* || exit 1
# remove stale nodes
rm -f /dev/${device}[0-3]
major=$(awk "//$2= =/"$module/" {print //$1}" /proc/devices)
mknod /dev/${device}0 c $major 0
mknod /dev/${device}1 c $major 1
mknod /dev/${device}2 c $major 2
mknod /dev/${device}3 c $major 3
# give appropriate group/permissions, and change the group.
# Not all distributions have staff, some have "wheel" instead.
group="staff"
grep -q '^staff:' /etc/group || group="wheel"
chgrp $group /dev/${device}[0-3]
chmod $mode  /dev/${device}[0-3]

 

《Linux Device Driver》——字符设备驱动程序 目标是编写一个完整的字符设备驱动程序——scull。即“simply character unility for loading localites,区域装载的简单字符设备”。scull是一个操作内存区域的字符设备驱动程序,这片内存就相当于一个设备。scull的优点在于不和硬件相关,而只是操作从内核中分配的一些内存。 scull的设计 主设备号和次设备号 对字符设备的访问通过文件系统内的设备名称进行。位于/dev下 ls -al 字符设备用“c“标识 块设备用”b“标识 ... 阅读详情

相关推荐

LDD3只包含第三章的内容scull源码

LDD3提供的官方源码包含第三章到第六章的内容,这里把源码剥离出来,只包含第三章的源码,并在ubuntu12.04(kernel version 3.2.0-23-generic)操作系统上面编译通过,源码解释,大家具体参考我的博客。

LDD3 SCULL驱动测试程序,字符驱动模型的理解

这两天闲暇,突然想再把LDD3书上的例子细过一遍,就着手看了,说实话,这个上面SCULL驱动有点晦涩难懂,真是看了大半天。 开发板被搞得现在还没起来,没办法只能在x86 ubuntu上实验驱动了。 驱动其实本身并不难写尤其是很多常见的芯片,网上有很多可用的驱动程序,即便没有也可以着手芯片手册尝试写出来,而linux驱动难得地方不在于驱动本身,而在于你要知道怎么把一个驱动程序放进linux 驱动...

w346665682的博客 546

Linux设备驱动——第三章字符驱动

本章的目的是编写一个完整的字符设备驱动。我们开发一个字符驱动是因为这一类适合大部分简单的硬件设备。字符驱动也比块驱动易于理解。本章的最终目的是编写一个模块化的字符驱动,但是我们不会在本章讨论模块化的事情。贯穿本章,我们展示从一个真实设备驱动提取的代码片段:scull(Simple Character Utility for Loading Localities)。scull是一个字符驱动,操作一块内存区域好像它是一个设备。

qq_33933799的博客 1876

LDD3 /scull 驱动实例在linux3.2.0编译实现

由于LDD3驱动实例都是在linux2.6.10中实现,在后期linux内核版本中有些改动,导致有些实例编译不通过。 环境:ubuntu12.04   内核版本:linux3.2.0  实例:LDD3驱动实例 SCULL 排除错误 1、scripts/Makefile.build:49: *** CFLAGS was changed in "/usr/src/linux-source

rig622的专栏 7112

最简单的scull设备驱动

写一个简单的scull设备驱动

每个人的博客 992

LDD3源码分析之并发与竞态

转载自http://blog.csdn.net/liuhaoyutz/article/details/7383653 作者:刘昊昱  博客:http://blog.csdn.net/liuhaoyutz 编译环境:Ubuntu 10.10 内核版本:2.6.32-38-generic-pae LDD3源码路径:examples/scull/main.c  examples/misc

ldinvicible的专栏 396

LDD3源码分析之llseek分析

作者:刘昊昱  博客:http://blog.csdn.net/liuhaoyutz 编译环境:Ubuntu 10.10 内核版本:2.6.32-38-generic-pae LDD3源码路径:examples/scull/main.c   本文分析LDD3第6章的llseek函数。   一、用户空间的lseek函数 要理解驱动中llseek函数的实现,必须先

fenghai888的专栏 419

LDD3边读边学(第三章)字符设备驱动 scull 实验全过程

通过本次实验,完成了一个简单的 Linux 字符设备驱动 scull 的实现,并掌握了以下关键知识:1. Linux 字符设备驱动的基本结构2. 内核模块的编译与加载过程3. 设备文件 /dev 与驱动之间的关系4. 用户空间程序与内核驱动之间的通信机制5. copy_to_user() 与 copy_from_user() 的使用实验验证了 Linux 字符设备驱动中 open、read、write、release 等接口能够正常工作。

ada73的博客 427

Linux设备驱动开发终极指南:从零基础到实战精通

Linux设备驱动开发是系统编程中的核心领域,而 **Linux Device Drivers 3 examples** 项目(ldd3)为开发者提供了适配最新内核的实战案例。本指南将带你从基础概念到实际操作,掌握设备驱动开发的关键技能,让你快速上手并解决实际开发中的问题。 ## 📚 项目简介:为什么选择ldd3ldd3项目是经典书籍《Linux Device Drivers 3》示例代

gitblog_00582的博客 414

VoxCPM2完全实操指南:免费多语言语音合成与声音克隆,从零跑通到生产部署

VoxCPM2 是一款开源的多语言语音合成(TTS)与声音克隆工具:输入文本直接生成 48kHz 音频,覆盖 30 种语言和 9 种中文方言,还能凭一句描述"捏"出全新音色,或用几秒参考音频克隆指定声音。本文按"先跑通、再调优、后部署"的顺序,带你把安装、四种生成模式、原理、微调和常见问题一次讲清。 ## 1. 它适合解决什么问题,不适合什么 用语音合成工具时常见的三个卡点: - **语言覆

gitblog_00913的博客 777

[个人总结] LDD33.字符驱动 - scull(1)

定义驱动要给用户提供的能力(机制);scull 是「内存虚拟字符设备」,一套源码实现多类设备,核心差异在「特性规则」;scull0~3:全局共享 + 永久存储,无访问限制,本章唯一重点实现;:FIFO 管道型,核心演示「阻塞 / 非阻塞读写」,无硬件中断依赖;scull 高级变体:底层和基础款一致,差异是「设备打开阶段的访问控制策略」;驱动的「机制」是底层功能,「策略」是上层规则,真实驱动常结合二者;本章学习范围:只吃透scull0~3,其余高级特性留到后续章节。

m0_63020222的博客 913

LDD3 SCULL字符设备驱动搭建流程

本节对实现LDD3书中前六章的scull字符设备驱动的步骤进行了梳理。搭建步骤依据书中所讲内容,逐步完善。hello模块实现,设备驱动的基础入门scull裸机模块的实现,字符设备驱动开发方式pipe实现access.c实现我的实现在中,其中examples是官方例程,scull是我基于linux6.2的实现,scull/test是一些测试程序(文件忘记clean,如果文件太乱可以先make clean一下,使用时再make)。

m0_61455436的博客 257

LDD3在Ubuntu下编译 scull例子时遇到的一些问题

原文:http://blog.csdn.net/lxmky/archive /2010/06/17/5675706.aspx在Linux下的驱动开发时,编写碰到一个问题,就是在Ubuntu 下不能编译,经过网上的搜索后,找到如下一篇博客,非常不错,如下: 编译LDD3-scull1、提示scripts/Makefile.build:46:*** CFLAGS was changed in "/home/chenfang/scull/Makefile",Fix it use EXTRA_CFLAGS.

snow25bz的专栏 2736

[个人总结] LDD33.字符驱动 - scull3

(1)量子(quantum)定义:scull 管理的「最小独立内存块」,是一次kmalloc分配的连续内存区域,缺省大小为 4000 字节(4KB 左右,适合kmalloc分配);作用:作为 scull 存储数据的「基本单元」,用户写入的数据会被依次填充到一个个量子中,量子满了之后会分配新的量子;本质:一块连续的内核内存,指针指向该内存块的起始地址。(2)量子集(qset,量子集合)定义:一个「指针数组」,数组中的每个元素都指向一个「量子」,缺省数组大小为 1000。

m0_63020222的博客 627

[个人总结] LDD33.字符驱动 - scull(4)

scull 驱动完成四大核心方法后可编译使用,核心特性是「内存持久化缓存,数据直到被覆盖或驱动卸载才丢失」;完整使用流程:编译内核模块(Makefile)→ 加载模块(insmod)→ 创建设备文件(mknod)→ 测试设备(cp/dd/cat)→ 卸载模块(rmmod);mknodmknod /dev/xxx c 主设备号 次设备号c表示字符设备;free -h用于观察系统内存变化,验证 scull 的内存分配与释放是否正常,无内存泄漏;strace用于跟踪用户程序的系统调用,验证read/write。

m0_63020222的博客 900

LDD3《Linux设备驱动》中的最简单的字符设备驱动实现与测试

代码如下:#include #include #include #include #include #include #include #include #include //#include "scull.h" #define SCULL_MAJOR 0 /* dynamic major by default */ #define SCULL_NR_DEVS 4

bg2bkk的专栏 1194

Linux Device Drivers 3 (LDD3) 项目教程

Linux Device Drivers 3 (LDD3) 是一个开源项目,旨在提供与现代内核兼容的设备驱动程序示例。该项目基于《Linux Device Drivers 3》一书中的示例代码,并对其进行了更新,以确保这些示例能够在最新的Linux内核版本中正常编译和运行。 LDD3 项目的主要目标是帮助开发者理解和编写Linux设备驱动程序。通过提供经过验证的示例代码,开发者可以快速上手并深入

gitblog_00506的博客 812

Linux设备驱动程序(LDD) 第三章:Scull设备

简介 SCULLLDD为字符型设备驱动程序创建的一个示例。其作用是在内存中开辟一段缓冲区,这部分缓冲区可以写入数据,也可以读出数据。 编译环境 编译环境使用Ubuntu 10.04,内核版本2.6.35.14 LDD的源码包:http://pan.baidu.com/s/1kUU5cVl 将源码包解压之后,进入scull目录下执行make指令编译,通常情况下编译是会报错的。这是因为源码包

御风牧云的代码笔记 1081
上一篇: C语言 static
下一篇: gcc-4.1.0与gdb6.5安装
bdc995
博客等级 码龄19年 8粉丝 16原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值