精华内容
下载资源
问答
  • 0.11内核代码研究求助

    2017-08-17 07:44:05
    在看内核代码的时候,有几个地方比较困惑,源代码如下 (void)open("/dev/tty0",O_RDWR,0) (void)dup(0); (void)dup(0); 虽然每个函数都知道什么作用,但放在这里,就是不知道坐着的意图是什么?望高手给予解答 ...
  • linux内核代码风格

    千次阅读 2014-03-24 09:57:47
    常见的代码风格 有Linux内核代码代码风格,也有各大公司自己规定的风格,这里简单描述下内核的代码风格:  1. 缩进和空白 (1)if, while, for 与其后左括号间添加一个空格分隔,同时 括号内 表达式紧贴括号 while (a...

    代码风格如同人的品味与修养,一定程度上体现着程序员做事的态度。

    常见的代码风格 有Linux内核代码代码风格,也有各大公司自己规定的风格,这里简单描述下内核的代码风格:

     1. 缩进和空白

    (1)if, while, for 与其后左括号间添加一个空格分隔,同时 括号内 表达式紧贴括号

    while (a == 3)

    (2)UNIX系统标准的字符终端是24行80列,所以字符较长时 应折行写,这行后用空格和上面的表达式对齐,例

    if (sqrt(x*x + y*y) > 5.0
         && x < 0.0
         && y > 0.0)

    (3) 关于括号的对齐,如 if / else, while, do/while, for, switch

    if (...) {
    } else if (...) {
    ...
    }

    switch () {
    case 'A':
    		....
    case 'B':
    		....
    default:
    		....
    }

    2. 注释 

    较长时放在函数正上面,紧贴无空格

    /* 
     * name: function_test
     * function: to test
     */
     void function_test()
     {
    	....
     }	

    较短可放在同行右侧

    int num; /* to count the num */

    3. 标识符命名

    (1)常用的缩写

    count -> cnt
    block -> blk
    length -> len
    window -> win
    message -> msg
    temporary -> tmp
    internationalization -> i18n
    tans -> x
    transmit -> xmit

    常量用大写  例 常量 QUEUE_LEN
    变量用小写+下划线 例 变量 radix_tree_insert
    同类的标识符风格有 微软的匈牙利命名法,此处建议用 内核风格,养成习惯 并保持一样


    4. indent

    可以借助工具indent将 代码转换为某种风格, 此处将 此处 代码转换为 内核代码风格:

    indent -kr -i4 main.c 即可

    其中 -kr 选项表示使用K&R风格, -i4表示 缩进 4个空格。但indent不能为代码自动添加 空白行,所以更多需要自己养成习惯



    展开全文
  • 使用GCOV统计内核代码

    千次阅读 2018-09-20 22:43:31
    Linux kernel将Gcov嵌入了原生的内核编译框架中,可以使用gcov统计内核代码覆盖情况。 内核编译 1.版本编译 1)打开kernel GCOV支持 我们需要打开如下的几个config项: CONFIG_DEBUG_FS=y CONFIG_GCOV_KERNEL=y ...

    摘要

    Gcov是gcc自带的代码覆盖率统计工具,配合lcov工具可以统计并生成代码覆盖率。Linux kernel将Gcov嵌入了原生的内核编译框架中,可以使用gcov统计内核代码覆盖情况。

    内核编译

    1.版本编译
    1)打开kernel GCOV支持
    我们需要打开如下的几个config项:
    CONFIG_DEBUG_FS=y
    CONFIG_GCOV_KERNEL=y
    CONFIG_GCOV_FORMAT_AUTODETECT=y
    CONFIG_GCOV_PROFILE_ALL=y
    2)使用
    make; make install等步骤替换系统内核,然后重启系统,进入新编译内核。

    覆盖了统计

    1.执行下面命令对覆盖率清零

    # lcov  -z
    Auto-detecting gcov kernel support.
    Found upstream gcov kernel support at /sys/kernel/debug/gcov
    Resetting kernel execution counters
    Done.
    

    2.编译下面测试用例,并执行

    # cat test.c
    #include <stdio.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    
    void main()
    {
        open("a", O_WRONLY|O_CREAT);
    }
    
    # ./test
    

    3.下面命令统计覆盖率

    # lcov -c  -o  kernel.info (统计内核下所有代码覆盖了)
    # lcov -c  -k  fs  -o  fs.info(指定内核代码下fs文件夹代码覆盖率)
    

    4.获取 HTML 输出

    # genhtml  fs.info -o fs_conv_result 
    

    fs_conv_result 指定生成的文件存放路径,然后文件夹拷贝出来可浏览器打开查看。

    5.Linux下查看

    # lcov -l fs.info
    Reading tracefile fs.info
    lcov: WARNING: negative counts found in tracefile fs.info
                                                   |Lines      |Functions|Branches
    Filename                                       |Rate    Num|Rate  Num|Rate   Num
    ================================================================================
    [/home/cuibixuan/git/linux/]
    arch/x86/include/asm/arch_hweight.h            | 0.0%     2|    -   0|    -    0
    arch/x86/include/asm/atomic.h                  |64.3%    14|    -   0|    -    0
    arch/x86/include/asm/atomic64_64.h             |92.3%    13|    -   0|    -    0
    arch/x86/include/asm/barrier.h                 | 100%     1|    -   0|    -    0
    arch/x86/include/asm/bitops.h                  |63.3%    30|    -   0|    -    0
    arch/x86/include/asm/cpufeature.h              | 0.0%     1|    -   0|    -    0
    arch/x86/include/asm/current.h                 | 100%     1|    -   0|    -    0
    arch/x86/include/asm/elf.h                     | 100%     7|    -   0|    -    0
    arch/x86/include/asm/hugetlb.h                 | 0.0%     1|    -   0|    -    0
    arch/x86/include/asm/io.h                      | 0.0%     1|    -   0|    -    0
    arch/x86/include/asm/irqflags.h                | 100%     5|    -   0|    -    0
    arch/x86/include/asm/jump_label.h              | 100%     1|    -   0|    -    0
    arch/x86/include/asm/msr.h                     | 0.0%     2|    -   0|    -    0
    arch/x86/include/asm/page.h                    | 0.0%     1|    -   0|    -    0
    arch/x86/include/asm/page_64.h                 |66.7%     3|    -   0|    -    0
    arch/x86/include/asm/pgtable.h                 | 0.0%    18|    -   0|    -    0
    arch/x86/include/asm/pgtable_64.h              | 0.0%     1|    -   0|    -    0
    arch/x86/include/asm/pgtable_types.h           | 0.0%     4|    -   0|    -    0
    arch/x86/include/asm/pkeys.h                   | 0.0%     1|    -   0|    -    0
    arch/x86/include/asm/preempt.h                 | 100%     1|    -   0|    -    0
    arch/x86/include/asm/processor.h               | 100%     2|    -   0|    -    0
    arch/x86/include/asm/smap.h                    | 100%     2|    -   0|    -    0
    arch/x86/include/asm/stacktrace.h              | 0.0%     2|    -   0|    -    0
    arch/x86/include/asm/uaccess.h                 |83.3%     6|    -   0|    -    0
    arch/x86/include/asm/uaccess_64.h              |37.5%    24|    -   0|    -    0
    arch/x86/include/asm/word-at-a-time.h          | 100%     5|    -   0|    -    0
    fs/aio.c                                       | 0.7%   591| 2.0%  50|    -    0
    fs/anon_inodes.c                               | 0.0%    42| 0.0%   5|    -    0
    fs/attr.c                                      |57.1%   112|66.7%   6|    -    0
    fs/autofs/autofs_i.h                           | 0.0%    17|    -   0|    -    0
    fs/autofs/dev-ioctl.c                          | 0.0%   212| 0.0%  25|    -    0
    fs/autofs/expire.c                             | 0.0%   193| 0.0%  13|    -    0
    fs/autofs/init.c                               | 0.0%    12| 0.0%   3|    -    0
    fs/autofs/inode.c                              | 0.0%   170| 0.0%   9|    -    0
    fs/autofs/root.c                               | 0.0%   277| 0.0%  21|    -    0
    fs/autofs/symlink.c                            | 0.0%     6| 0.0%   1|    -    0
    fs/autofs/waitq.c                              | 0.0%   215| 0.0%   8|    -    0
    fs/bad_inode.c                                 | 3.4%    58| 4.0%  25|    -    0
    fs/binfmt_elf.c                                |42.2%   661|33.3%  24|    -    0
    fs/binfmt_script.c                             |83.7%    49|33.3%   3|    -    0
    fs/block_dev.c                                 | 1.9%   748| 6.8%  73|    -    0
    fs/btrfs/acl.c                                 | 0.0%    48| 0.0%   4|    -    0
    fs/btrfs/async-thread.c                        | 0.0%   133| 0.0%  34|    -    0
    fs/btrfs/backref.c                             | 0.0%   760| 0.0%  38|    -    0
    fs/btrfs/btrfs_inode.h                         | 0.0%    26|    -   0|    -    0
    fs/btrfs/compression.c                         | 0.0%   493| 0.0%  27|    -    0
    fs/btrfs/ctree.c                               | 0.0%  2151| 0.0%  86|    -    0
    

    在这里插入图片描述

    展开全文
  • 你写好了一部分内核代码要提交给内核的恰当时机是当内核的合并窗口打开的时候,一般持续2个周,之后发布rc1版本,rc1之后一般只对合并窗口添加的代码进行测试和修改,而不添加新的功能(新的硬件驱动除外)。...

    内核开发周期

    你写好了一部分内核代码要提交给内核的恰当时机是当内核的合并窗口打开的时候,一般持续2个周,之后发布rc1版本,rc1之后一般只对合并窗口添加的代码进行测试和修改,而不添加新的功能(新的硬件驱动除外)。这个修改会根据程序一直持续到到rc7甚至rc9,最后发布稳定版本。然后再打开合并窗口。

    在rc测试并稳定的过程中,造成bug较多的合并可能会被回朔,而从内核中剔除,所以提交给内核之前开发者应该进行充分的测试。

    提交patch

             建议使用从内核的git树下载代码进行内核开发,因为提交的patch也都要求是git格式的。git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
    linus本人在github维护了一个内核树,他每次发布的时候都会使用这个github,很多人在上面commit,但是linus本人不接受pull request。commit的方式看起来非常简单,貌似也挺有效果的。

             提交的patch必须经过社区内核维护者的充分测试,他们一般都不是全职的,所以良好的文档是必要的。测试稳定后会有Linus本人合并进内核,但是如果出现了问题,patch作者有责任修改,否则不予合并。稳定发布之后,patch的作者有责任继续维护,否则这个patch很可能被后续取消(例如devfs)。

             内核分为很多个子系统,每个子系统都有对应的维护者,提交的patch并不是提交给linus本人,而是提交给对应子系统的维护者。每个维护者都只接受只修改本部分代码的patch,经过其长期的测试和稳定后,当合并窗口打开,子系统维护者会要求linus合并其维护的patch进mainline,linus对维护者无条件信任,不经过后续测试。各个维护者之间可能会互相合并代码,比如网络部分和对应网络设备驱动是两个不同的维护者,但是其代码是相关的,这就需要其二位私下合并测试。

    内核代码树维护

             linus本人当然维护的是mainline的内核树,这也是大部分用户下载内核代码的地方。然而当要提交一个patch的时候,却不是提交到mainline,各个子系统的维护者如何能确保自己选取的patch不会与其他子系统选取的要合并的patch冲突?这就需要对其他人选择的patch有个前瞻性的了解,维护者可以逐个去pull其他维护者的代码,但是这是风险很大,因为其尚未稳定。

    http://www.kernel.org/pub/linux/kernel/next/

             维护的是下个版本要合并的全部的patch,在合并之前,所有的patch都要进入该代码树,其维护者是Stephen Rothwell。

             在mainline中也有一个维护不成熟驱动的专门的地方,位于driver/staging,如果你想找点活干,在这里有很多要多的事情的列表。你自己写的驱动未经过充分测试前也会放在这里面,维护人是Greg Kroah-Hartman。这里面的驱动如果经常有更新和修复,等到趋于完善后会进入合适的内核正式代码,如果长时间没有更新,则可能会被删除掉。

              MAINTAINERS文件是防止各个子系统的责任人的文件,提交的对对应的子系统的修改都应该提交给他们,如果找不到对应的维护人,可以找Andrew
    Morton (akpm@linux-foundation.org)。如果是内核安全方面的,比较特殊,发送给security@kernel.org,就不要公开发表了。尽量不要直接给linus本人发邮件,他是个大忙人。直接对稳定版的修改还应该Cc: stable@vger.kernel.org 。如果改了用户空间的使用方法,还应该更新man文件,同时抄送给linux-api@vger.kernel.org


     

    展开全文
  • 近日,小米在 Github 上开源了小米 9 的内核源代码,...此外,小米 9 SE 内核代码以及其他旧设备内核源代码,在2019年都会逐步开源。 小米工程师 @秋叶随风 在微博表示,2019年小米的目标是,上市即开源。 目...

    近日,小米在 Github 上开源了小米 9 的内核源代码,项目代号“cepheus”。

    此次内核源代码的发布,意味着开发者可以更轻松开发自定义 ROM。目前开源的内核版本为小米 9 的稳定版,开发版内核源代码在后续也会陆续开源。此外,小米 9 SE 内核代码以及其他旧设备内核源代码,在2019年都会逐步开源。

    小米工程师 @秋叶随风 在微博表示,2019年小米的目标是,上市即开源。

    目前仅开源 2 日,其 Github Start 数已经 2600+,issue open 485 个,足以见得开发者对于小米这次开源的喜爱。

    项目地址:MiCode/Xiaomi_Kernel_OpenSource at cepheus-p-oss

    原文地址:https://www.oschina.net/news/104598/xiaomi-9-open-source-kernel-code

    展开全文
  • KVM内核代码结构

    千次阅读 2012-09-26 17:24:43
    KVM内核代码结构 因为KVM的源代码已经包含在了Linux的内核树中,因此我们只需直接从www.kernel.org下载代码即可,内核源码包打开较大,解开后目录结构大概是这个样子: 涉及KVM的主要有两个目录,virt...
  • 苹果开源内核代码iOS, ARM macOS

    千次阅读 2017-11-30 23:25:11
    苹果开源内核代码iOS, ARM macOS
  • 如何使用git获取linux内核代码仓库

    千次阅读 2018-03-27 09:44:21
    如何使用git获取linux内核代码仓库 目录 用 [TOC]来生成目录: 如何使用git获取linux内核代码仓库 目录 下载指定分支 获取分支log信息 添加其他远程分支 获取远程分支 切换分支 查看远程分支信息 本...
  • 用Source Insight建立一个Linux内核代码工程具体步骤如下: (一)打开Source Insight,单击【项目】按钮,弹出下拉菜单。 (二)单击【新项目】按钮,弹出【新项目】对话框,输入项目名和存放路径,单击【确定】...
  • 非常适合用于查看linux内核代码的...内核代码版本包括从2.0.40-4.4版本的linux内核代码 Identifier Search可以来查询各种关键字,关键字必须是完整,不支持模糊搜索 点击变量名、函数名等可以直接搜索 需要翻墙。。。。
  • 在linux内核代码开发中,头文件不能包含标准C头文件,只能采用GNC标准 而且内核开发中没有main函数,只有init 和 exit ,这是每个内核模块中必须要包含的函数模块. 在GNU C标准中,打印信息采用printk函数,printk...
  • Linux内核代码风格

    万次阅读 2011-03-08 10:27:00
    Linux内核代码风格 By Linus Torvalds
  • Linux:建立内核代码

    千次阅读 2011-08-02 08:14:46
    为什么建立内核代码树?菜鸟简单的以为,好比为有某个户型的房子(某个版本的Linux)设计门窗,那么当然需要根据该户型房子的具体参数进行设计了,或者说内核模块要基于内核版本或者该版本的内核代码。那么内核的...
  • linux kernel 2.6.32内核代码注释

    千次阅读 2013-06-30 07:19:30
    内核代码也有一段时间了,记了很多注释,分享出来。地址:http://www.kuaipan.cn/file/id_61251671069793742.htm
  • 搭建Linux内核代码阅读环境

    千次阅读 2011-10-09 10:02:46
    前言:在Win7下安装了VMware+Ubuntu,现在想阅读Linux内核代码。首先想到的是使用Source Insight,它是一款非常优秀的代码阅读工具。但Source Insight是运行在Window下的。除了将Linux内核代码copy到window下外,...
  • LINUX内核代码编程规范

    千次阅读 2012-02-08 10:27:57
    转】LINUX内核代码编程规范 2010-11-13 18:47 转载自 dr_wang 最终编辑 dr_wang  拜读了一下中文版的编码规范,一些地方还是非常认可的,就转帖了过来和大家分享。 Chinese translated version of ...
  • 请善用工具审核您的内核代码:)

    万次阅读 2014-04-17 21:31:22
    在写内核代码时,代码风格是一个很重要的部分,否则内核代码将变的混乱不堪。那么什么样的代码算漂亮的代码?什么样的代码符合c99这样的标准?此外,程序写完之后,有什么工具能够帮我们检查代码有没有指针错误?...
  • 大杀招之使用QEMU调试Linux内核代码

    千次阅读 2014-08-13 00:24:14
    Linux内核代码的调试非常麻烦,一般都是加printk, 或者用JTAG调试。 这里的方法是用QEMU来调试Linux内核。因为QEMU自己实现了一个gdb server, 所以可以非常方便的使用gdb来调内核。 这对内核的学习也非常有帮助。 ...
  • 大概介绍Linux-内核代码中常常碰到的 函数指针 使用流程
  • 一定要注意的是不能直接访问用户空间数据,内核代码可以通过特殊的函数来访问用户空间数据,copy_to_user copy_from_user这两个函数就是内核代码访问用户空间数据的函数,但是内核不能直接通过像是memcpy函数来直接...
  • Linux Kernel系列 - 牛X的内核代码注释

    千次阅读 2014-08-06 16:01:45
    Hanks.Wang - 专注于操作系统与移动安全研究,Linux-Kernel/SELinux... 牛X的内核代码注释 大牛的代码质量高稳定性好,而且逻辑清晰易读性比较强,今天看到Linux Kernel红黑树的代码时,瞬间被大牛的代码注释秒
  • 用Source Insight建立一个Linux内核代码工程具体步骤如下: (一)打开Source Insight,单击【项目】按钮,弹出下拉菜单。 (二)单击【新项目】按钮,弹出【新项目】对话框,输入项目名和存放路径,单击...
  • ubuntu12.04(64bit)编译android-3.4内核代码

    千次阅读 2013-06-28 16:28:20
    老罗是用11.04编译android的内核的android-gldfish-2.6.29代码。 而代码树是会变的,使用他的...goldfish时Google为android的emulator制作的内核代码,具体百度。。。 $ git clone http://android.googlesource
  • Windows Vista 64位内核驱动或内核代码签名(Kernel Signing)指南您得到以上双证书文件后就可以签名您的Windows Vista内核模式代码(硬件驱动、系统文件、杀毒软件等),具体签名步骤如下,建议同时参考微软网站上的...
  • 华为手机开源内核代码

    千次阅读 2017-10-28 10:30:41
    华为开源代码链接:http://consumer.huawei.com/en/opensource/detail/?siteCode=worldwidw?productCode=Smartphones&fileType=openSourceSoftware&pageSize=10比如搜索mate系列:
  • 如何使用gdb调试android webkit内核代码

    万次阅读 2011-10-25 15:46:05
    如何使用gdb调试android webkit内核代码 红心地瓜 得益于脚本的帮助,在Emulator中使用GDB调试Native Code的设置非常简单,比如我用gdb+gdbserver调试webkit 1. 找到你的toolchain对应的gdb,在模拟器上是...
  • 重新编译centos内核代码

    千次阅读 2018-07-10 17:59:13
    首先从centos官网下载kernel代码,我选择的是7.3.1611,其它版本也是一样的操作。http://vault.centos.org/7.3.1611/os/Source/SPackages/kernel-3.10.0-514.el7.src.rpm操作系统版本# cat /etc/redhat-...
  • 注意:本文档中的内核代码的版本:linux-4.0.5两者的关系net.ipv4.tcp_tw_recycle是与net.ipv4.tcp_timestamps是密切相关的,而net.ipv4.tcp_timestamps默认是开启的,当tcp_tw_recycle和tcp_timestamps同时打开时会...
  • 截止到2020年1月1日09:00:10,Linux内核Git源码树中的代码达到了2780万行。 phoronix网站统计了Linux内核在进入2020年时的一些源码数据并...
  • 在windows下使用source insight写linux代码,使用 #include <linux/interrupt.h> 这样的头文件包含的方式始终无法跳转到头文件,出现Symbol not find.,如下: 应该如何设置呢?在source insight的BASE工程...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 58,126
精华内容 23,250
关键字:

内核代码