LDD 知识整理

LDD 知识整理1、LDD3中文http://oss.org.cn/kernel-book/ldd3/index.html

大家好,又见面了,我是你们的朋友全栈君。

学习总结:

1、 学习内核自带的文档

昨天阅读了一下内核中的文档:

README
Documentation/HOWTO

学到了不少东西。知道了一个网站 http://kernelnewbies.org,一些FAQ , 摘录如下

(1) Code Browsing

a) cscope,tags

原来内核中有生成 cscope和tags的脚本

make cscope
make tags

给make加上V=1,可以看到哪些命令被执行。

$ make cscope V=1
  /bin/bash linux-2.6.32.63/scripts/tags.sh cscope
.....
+ cscope -b -f cscope.out

可以看到调用的是 scripts/tags.sh 这个脚本。

b) find + grep 

查找结构体定义

find . -name ‘*.[chS]’ | xargs grep -EnH “\W*struct\W+task_struct\W*{“

查找函数定义

find . -name ‘*.[chS]’ | xargs grep -EnH “cdev_init\W*\(struct cdev”

注: find 命令用来确定查找文件的类型,这里查找 .c .h .S(汇编) 文件。

         xargs 比较关键,没有他,无法 正确运行,它将前面命令的输出作为后面命令的参数。(管道是将前面的输出作为后面的输入stdin。)

        grep -E 表示使用正则表达式。 \W 代表空白字符, * 表示前面的字符出现0次或多次

      

c) lxr    (很好的网站)

http://lxr.oss.org.cn/

2、 准备好’游戏机’

写好的驱动需要insmod来测试。可以准备一个专门用于学习驱动开发的虚拟机。就当它是你的游戏机吧!

下载fedora 12。用virtual box安装成虚拟机。然后下载你要研究的内核。我下载的是 2.6.32

然后编译安装你的内核。成功后,以此内核为源码树,然后就写驱动,尽情的insmod吧

(原来是在开发板子上验证驱动,不过LDD3的例子不涉及具体硬件的时候,可以用这个虚拟机。不过真正的驱动怎么能不和硬件打交道呢,所以最后一定要为开发板写个驱动,将理论用于实践最重要!)

编译安装内核参考: 

   http://blog.chinaunix.net/uid-26497520-id-3593098.html

   http://lesca.me/archives/config-and-install-kernel.html

   initrd.img and System.map

  http://www.cnblogs.com/parrynee/archive/2010/05/13/1734791.html

下载,解压内核之后。

  cd linux-2.6.32
  cp /boot/config-`uname -r` ./.config
  make menuconfig
  make
  make modules
  sudo make install
  sudo make modules_install

将虚拟机运行级别变成文本模式: 修改 /etc/inittab文件 

id:3:initdefault:

使用ssh方式登陆虚拟机。 ssh ip地址。

使用screen来管理回话,很方便。

3、 编写驱动

写过的驱动代码放到github,然后写一个总结页面,把链接放在这里

Hello World

4、内核源码分析

分许与驱动相关或其他内核源码

alloc_chrdev_region

copy_to_user and copy_from_user

学习资料:

1、LDD3 book

英文:

http://lwn.net/Kernel/LDD3/

中文:

http://oss.org.cn/kernel-book/ldd3/index.html

感谢 作者和开源中国 oss.org.cn

2、代码下载

kernel 2.6.X http://examples.oreilly.com/9780596005900/

kernel 3.x  https://github.com/kerneltravel/ldd3-examples-3.x

other: https://github.com/4get/ldd3_examples

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/132879.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 策略篇&访问策略 ❀ (5.4) 01. Explicit Web Proxy 显式web代理 ❀ 飞塔 (Fortinet) 防火墙

    策略篇&访问策略 ❀ (5.4) 01. Explicit Web Proxy 显式web代理 ❀ 飞塔 (Fortinet) 防火墙【简介】提供代理服务的计算机或其它类型的网络节点称为代理服务器,其具体过程为:客户端首先与代理服务器创建连接,接着发出一个对另外的目标服务器的文件或其它资源的连接请求,代理服务器通过与目标服务器连接或从缓存中取得请求的资源,并返回给客户端。通常在这个过程中,代理服务器可能改变客户端请求或服务器端响应的一些内容以满足各种代理需要。显式代理飞塔防火墙支持支持…

  • selinux 开启和关闭

    selinux 开启和关闭

  • @Param注解的使用和解析「建议收藏」

    @Param注解的使用和解析「建议收藏」作用:用注解来简化xml配置的时候(比如Mybatis的Mapper.xml中的sql参数引入),@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中(一般通过#{}的方式,${}会有sql注入的问题)。实例说明:1,使用@Param注解  Mapper接口方法:publicintgetUsersDetail(@Param("u…

    2022年10月26日
  • c语言中uint32是啥意思_uint16数据类型

    c语言中uint32是啥意思_uint16数据类型C++的基础数据类型:C++的主要数据类型,主要分为三类:布尔型,整型(char型从本质上说,也是种整型类型,它是长度为1的整数,通常用来存放字符的ASCII码),浮点型。而*_t是typedef定义的表示标志,是结构的一种标注。即我们所看到的uint8_t、uint16_t、uint32_t都不是新的数据类型,而是通过typedef给类型起得别名。uint8_t/uint…

  • 清除vs2005、vs2008起始页最近打开项目

    清除vs2005、vs2008起始页最近打开项目

    2021年11月17日
  • linux查看crontab状态_crontab -e

    linux查看crontab状态_crontab -elinux下定时执行任务的方法在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps-ef|grepcron]。cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。cron的配置文件称为“crontab”,是“crontable”的简写。一、cron在3个地方查找配置文件:1、/var/spool/cron/这个目录下存放的是每个用户包括root的cron…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号