- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux内核的数据类械耐
Linux设备驱动程序学习(7)-内核的数据类型
来源: ChinaUnix博客 日期: 2008.10.13 21:03 (共有0条评论) 我要评论 Linux设备驱动程序学习(7)-内核的数据类型 由于前面的学习中有用到 第十一章 内核数据结构类型 的知识,所以我先看了。要点如下: 将linux 移植到新的体系结构时,开发者遇到的若干问题都与不正确的数据类型有关。坚持使用严格的数据类型和使用 -Wall -Wstrict-prototypes 进行编译可能避免大部分的 bug。内核数据使用的数据类型主要分为 3 个类型: 标准 C 语言类型、确定大小的类型和特定内核对象的类型。 标准 C 语言类型 当需要“一个2字节填充符”或“用一个4字节字串来代表某个东西”,就不能使用标准C语言类型,因为在不同的体系结构,C语言的数据类型所占的空间大小不同。后面的datasize 程序实验展示了用户空间各种 C的数据类型在当前平台所占空间的大小。而且有的构架,内核空间和用户空间的C数据类型所占空间大小也可能不同。kdatasize模块显示了当前模块的内核空间C 数据类型所占空间大小。尽管概念上地址是指针,但使用一个无符号整型可以更好地实现内存管理; 内核把物理内存看成一个巨型数组, 内存地址就是该数组的索引。 我们可以方便地对指针取值,但直接处理内存地址时,我们几乎从不会以这种方式对他取值。使用一个整数类型避免了这种取值,因此避免了 bug。所以,利用至少在 Linux 目前支持的所有平台上,指针和长整型始终是相同大小的这一事实,内核中内存地址常常是 unsigned long。C99 标准定义了 intptr_t 和 uintptr_t 类型,它们是能够保存指针值的整型变量。但没在 2.6 内核中几乎没使用。 确定大小的类型 当需要知道你定义的数据的大小时,可以使用内核提供的下列数据类型(所有的数据声明在 , 被包含在??): u8; /* unsigned byte (8 bits) */u16; /* unsigned word (16 bits) */u32; /* unsigned 32-bit value */u64; /* unsigned 64-bit value *//*虽然很少需要有符号类型,但是如果需要,只要用 s 代替 u*/若一个用户空间程序需要使用这些类型,可在符号前加一个双下划线: __u8和其它类型是独立于 __KERNEL__ 定义的。这些类型是 Linux 特定的,它们妨碍了移植软件到其他的 Unix 机器。新的编译器系统支持 C99-标准 类型,如 uint8_t 和 uint32_t。若考虑移植性,使用这些类型比 Linux特定的变体要好。 接口特定的类型(_t 类型) 内核中最常用的数据类型由它们自己的 typedef声明,阻止了任何移植性问题。“接口特定(interface-specific)”由某个库定义的一种数据类型,以便为了某个特定的数据结构提供接口。很多 _t 类型在??中定义。注意:近来已经很少定义新的接口特定的类型。有许多内核开发者已经不再喜欢使用 typedef 语句,他们宁愿看到代码中直接使用的真实类型信息。很多老的接口特定类型在内核中保留,他们不会很快消失。即使没有定义接口特定类型,也应该始终是用和内核其他部分保持一致、适当的数据类型。只要驱动使用了这种“定制”类型的函数,但又不遵照约定,编译器会发出警告,这时使用 -Wall 编译器选项并小心去除所有的警告,就可以确信代码的可移植性了。_t 类型的主要问题是:打印它们时,常常不容易选择正确的 printk 或 printf 格式。打印接口特定的数据的最好方法是:将其强制转换为可能的最大类型(常常是 long 或 unsigned long ) 并用相应的格式打印。 其他移植性问题 移植的一个通常规则是:避免使用显式的常量值,要使用预处理宏使常量值参数化。时间间隔当处理时间间隔时,不要假定每秒的jiffies个数,不是每个 Linux 平台都以固定的速度运行.当计算时间间隔时,要使用 HZ ( 每秒的定时器中断数 ) 来标定你的时间。s3c2410的HZ值默认为200。页大小当使用内存时,记住一个内存页是 PAGE_SIZE 字节, 不是 4KB。相关的宏定义是 PAGE_SIZE 和 PAGE_SHIT(包含将一个地址移位来获得它的页号的位数),在 中定义。如果用户空间程序需要这些信息,可以使用 getpagesize 库函数。若一个驱动需要 16 KB 来暂存数据,一个可移植得解决方法是 get_order: #include asm/p
您可能关注的文档
- Hadoop现场演示与编的程过程.ppt
- HAS编写指导(中文)的.doc
- HD3000系列高性能矢的量控制变频器说明书.pdf
- HAZOP 分析技术报告的-中文.pdf
- HDMI连接电视,点对档你Windows桌面超出屏幕怎样解决.doc
- Heating system-04 的shanghai(simple).ppt
- heml代码的.ppt
- HeinOnline 数据库降拈绍及使用指南.doc
- HD6彩色超声诊断系偷某 20100209.ppt
- hMailServer配置说玫镊.doc
- 重难点9 说明文阅读(名模卷15篇)-2024年中考语文专练.pdf
- 广东省深圳市罗湖区2024-2025学年六年级上学期语文期末试卷.pdf
- 2026高考英语读后续写情绪描写高分佳句及高频词汇.pdf
- 高考语文一轮复习(限时训练):文学类文本阅读 (一)小说阅读 学案2(含答案).pdf
- 广东省深圳市2025年九年级物理化学第三次适应性考试试卷-初中化学(解析版).pdf
- 2021-2025年高考化学试题分类汇编:常见无机物的性质与用途(解析版).pdf
- 2025年人教版暑期新初二地理尖子生专项复习《西半球的国家》.pdf
- 安徽省黄山市2025-2026学年新高三暑假语文练习题(含答案).pdf
- 高考语文一轮复习(限时训练):文学类文本阅读 (一)小说阅读 学案5(含答案).pdf
- 银行消费者权益保护知识考试题库( 含各题型).pdf
最近下载
- 2025年档案管理员考试试题 .pdf VIP
- 万源储配煤基地建设可行性研究.pdf VIP
- 2024-2025学年广东省深圳市小升初分班考试数学试卷附答案解析.pdf VIP
- JTG F801-2017 公路工程质量检验评定标准 第一册 土建工程.docx VIP
- 新药临床试验监查—__培训课件.ppt VIP
- 项目4 光伏发电系统运行、维护及故障检修.ppt VIP
- 传染病培训试题及答案.pdf VIP
- (正式版)-B 7692-2012 涂装作业安全规程 涂漆前处理工艺安全及其通风净化.docx VIP
- 现浇箱梁满堂支架(盘扣式)专项施工方案.docx VIP
- 一种自动控制工件落差的防磕碰接料装置.pdf VIP
文档评论(0)