2019独角兽企业重金招聘Python工程师标准>>>

最近在向Linux内核提交一些驱动程序,在提交的过程中,发现自己的代码离Linux内核的coding style要求还是差很多。当初自己对内核文档里的CodingStyle一文只是粗略的浏览,真正写代码的时候在很多细节上会照顾不周。不过, 在不遵守规则的程序员队伍里,我并不是孤独的。如果去看drivers/staging下的代码,就会发现很多驱动程序都没有严格遵守内核的coding style,而且在很多驱动程序的TODO文件里,都会把"checkpatch.pl fixes"作为自己的目标之一(checkpatch.pl是用来检查代码是否符合coding style的脚本)。

不可否认,coding style是仁者见仁、智者见智的事情。比如Microsoft所推崇的匈牙利命名法,在Linus看来就是及其脑残(brain damaged)的做法。也许您并不赞成Linus制定的coding style,但在提交内核驱动这件事上,最好还是以大局为重。对于这么一个庞大的集市式的开发来说,随意书写代码必将带来严重的可维护性的灾难。

一些辅助工具
当代码量达到一定程度时,手动去检查和修改coding style是非常繁琐的工作,幸好,我们还有一些工具可以使用。

scripts/checkpatch.pl
这是一个检查代码是否符合内核编码规范的的脚本。顾名思义,checkpatch是用来检查patch的,默认的调用也确实如此。如果用来检查原文件,需要加上“-f”的选项。

我们来看一段无聊的代码(文件名为print_msg.c):

1
2
3
4
5
6
7
8
9
10
11
12
void print_msg(int a)
{

switch (a) {case 1:printf("a == 1\n");break;case 2:printf("a == 2\n");break;
}

}
这段代码的coding style是否有问题呢?用checkpatch.pl来检查一下:

scripts/checkpatch.pl -f print_msg.c

检查的结果是:

ERROR: switch and case should be at the same indent

转载于:https://my.oschina.net/u/3611008/blog/1860130

谈谈Linux内核驱动的coding style相关推荐

  1. 谈谈linux内核原理,谈谈Linux内核驱动的coding style

    最近在向Linux内核提交一些驱动程序,在提交的过程中,发现自己的代码离Linux内核的coding style要求还是差很多.当初自己对内核文档里的CodingStyle一文只是粗略的浏览,真正写代 ...

  2. vmlinux 反汇编_ARM Linux内核驱动异常定位方法分析--反汇编方式

    通常认为,产生异常的地址是lr寄存器的值,从上面的异常信息可以看到[lr]的值是c01a4e30. 接下来,我们可以通过内核镜像文件反汇编来找到这个地址.内核编译完成后,会在内核代码根目录下生成vml ...

  3. linux内核创建字符节点,Tiny6410学习ing—(四)、嵌入式Linux内核驱动进阶—(7)、高级字符设备驱动(自动创建节点)—#931...

    按照国嵌的视频教程上来说的,最后就是-自动创建设备文件! 其实我感觉以前完全可以直接是手动创建了设备文件,然后就可以直接讲述自动创建设备文件,为啥非要拖到最后来讲述,我也就不清楚了!! 不管了,写完收 ...

  4. linux内核下网络驱动流程,基于Linux内核驱动的网络带宽测速方法与流程

    本发明涉及一种测速方法,尤其是一种网络带宽测速方法. 背景技术: :电信运营商为客户提供一定带宽的Internet接入:为了检验带宽是否达标,一般均由客户使用个人电脑在网页上直接测速.但是随着智能网关 ...

  5. linux内核添加spi驱动,Linux内核驱动之spi子系统spi协议.docx

    Linux内核驱动之spi子系统spi协议 概况 SPI接口是摩托罗拉首先提出的全双工三线同步串行外围接口SCK,MOSI,MISO,采用主从模式(Master Slave)架构:支持多slave模式 ...

  6. 树莓派基于Linux内核驱动开发详解

    一.驱动认知 首先理解Linux内核框图 文件系统认知,Linux内核框图 1.什么是驱动 linux内核驱动.软件层面上的驱动 广义上是指:这一段代码操作了硬件去动,所以这一段代码就叫硬件的驱动程序 ...

  7. Linux内核驱动之efi-rtc

    Linux内核驱动之efi-rtc 1. UEFI与BIOS概述 1.1. BIOS 概述 1.1.1. BIOS缺点: 1.1.2. BIOS的启动流程 1.2 UEFI 概述 1.2.1 Boot ...

  8. Linux内核驱动 --ioctl函数解析

    1.前言 当我们在讨论linux内核驱动开发时,就不得不提到ioctl这个及其重要的函数.它是字符类设备驱动程序中实现对设备控制的接口之一. ioctl是设备驱动程序中对设备的I/O通道进行管理的函数 ...

  9. 从入门到精通ARM(4412)-Linux内核驱动编程【下】-李志勇-专题视频课程

    从入门到精通ARM(4412)-Linux内核驱动编程[下]-247人已学习 课程介绍         嵌入式绝对是当前IT领域最炙手可热的话题了.其主要应用领域涵盖与人类相关的各行各业: * 消费电 ...

最新文章

  1. xhtml和css概述
  2. java元空间扩容_JVM元空间(Metaspace)
  3. RefreshListView中onItemClick点击错位
  4. .NET6之MiniAPI(二十九):UnitTest
  5. Qt多线程编程的主要线程类
  6. vue 计算属性和data_Vue:计算属性
  7. Android开发中调用Spring CXF整合发布的WebService接口为什么抛出异常错误?
  8. 素数环 与 算法 全排列
  9. ASP.Net快速开发新闻系统 在线播放
  10. VIVO怎么创建计算机快捷方式,vivo手机快捷键怎么调出来
  11. android 65536 简书,app编译打包时的65536问题
  12. k8s安装部署Istio
  13. txt电子书如何用IOS苹果手机打开?
  14. QQ连连看单机版辅助制作全流程
  15. 如何下载微博、B站(哔哩哔哩)视频到电脑
  16. 哪些行业申请网站备案时需要提供前置或专项审批文件?
  17. 智能汽车-AR/VR应用浅析
  18. INSERT 语句与 FOREIGN KEY 约束FK_comment_news冲突。该冲突发生于数据库newssystem,表dbo.news, column 'id'。 语句已终止。
  19. mysql sending data_MySQL:sending data状态包含了什么
  20. android 使用signingConfigs进行打包

热门文章

  1. 面试官透露:候选人该这样展示值钱技能!
  2. cnblogs,我来了
  3. Android客户端捕获http请求包的方法
  4. 在controller中无法通过注解@Value获取到配置文件中定义的值解决办法
  5. Spring Cloud Edgware新特性之一:解决Eureka中Jersey 1.x版本过旧的问题-不使用Jersey
  6. 详解COOKIE和SESSION关系和区别
  7. Bzoj3730 震波
  8. MediaPlayer开发全解析
  9. PHP::转义与反转义函数 (POST/GET/COOKIE)
  10. java写文件方法之比较