Linux下编译LDD的第二个例子scull及简单运行测试

企鹅博客
19219
文章
0
评论
2019年7月14日06:48:21 评论 1.2K views 1121字阅读3分44秒

今天尝试编译一下ldd3的第二个例子SCULL(Ubuntu 10.04),结果遇到了一堆的问题:

参考:http://www.linuxidc.com/Linux/2011-04/33964.htm

1. LDD3书上的ftp位置没有LDD3的例子,只有LDD1和LDD2的例子,但是在examples目录下有个linuxdriver3目录,里面放了LDD3的例子...汗

2. 编译一上来就报错,说linux/config.h没有了,一查google,发现这个头文件在新的内核中已经删除不用了,分别在access.c和pipe.c中加入了linux/sched.h,然后把linux/config给删除了,ok,头文件问题解决,再继续编译.

3. 在access.c中,发现uid和euid这两个变量不属于current结构了,需要从current->uid改成current-cred->uid了。改完再编,终于过了...

Linux还真是与时俱进阿,这内核结构改的真快阿...

SCULL简单运行测试

把SCULL编译和链接都完成了,后来一直没有时间仔细看代码和使用一下,今天抽出时间来用了一把,有些小心得,自己记录一下:

1. 安装scull可以通过insmod或者自带的那个scull_load脚本,脚本默认没有执行权限,所以需要chmod +x一把

2. 安装完之后,在系统中可以用ls -l /dev/scull看到多了很多个scull设备,还可以用cat /proc/devices看到scull设备,用lsmod命令也一样

3. 我在使用ls -l > /dev/scull0的时候总是遇到 Permission denied的情况,加SUDO都没有用,scull0的属性应该也没有问题

网上有兄弟和我一样的情况,不过也没有解决,绕过去的办法是使用cp命令...汗

好,回头再来看看代码把,kscope比起source insight来说,还是差的很远的....

两种函数的区别:register_chrdev_region(alloc_chrdev_region)只是向系统注册一个设备号,接着还是需要使用cdev_add把这个设备号对应的内核结构向操作系统注册。

struct cdev {

struct kobject kobj;

struct module *owner;

const struct file_operations *ops;  // 向系统注册时,给系统能够调用的操作指针

struct list_head list;

dev_t dev;                                    // 设备号,通过这个值,操作系统就可以把某个特定的设备号和内核的某个数据结构联系在一起

继续阅读
  • 版权声明: 发表于 2019年7月14日06:48:21
  • 转载注明:https://www.qieseo.com/151124.html
Linux下paste命令 Linux编程

Linux下paste命令

cut用来从文本文件或标准输出中抽取数据列或者域,然后再用paste可以将这些数据粘贴起来形成相关文件。 粘贴两个不同来源的数据时,首先需将其分类,并确保两个文件行数相同。paste将按行将不同文件行...
在Android中加入充电指示 Linux编程

在Android中加入充电指示

基于Andriod系统的平台在没有硬件充电指示的情况下只有进入andriod系统才能进行充电指示,而我们有时候仅仅需要充电而不需要进入系统,本文介绍了实现这种功能的方法。 具体过程如下:当内核启动后调...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: