GitHub: https://github.com/storagezhang Emai: debugzhang@163.com 华为云社区:https://bbs.huaweicloud.com/blogs/250379 本文翻译自 https://www.kernel.org/doc/html/v4.10/_sources/process/coding-style.txt 本文简短描述了 Linux 内核推荐的代码风格.代码风格是非常个性化的,但这是 Linux 内核必须维持的准则,对于很多…
from:http://blog.csdn.net/jiang_dlut/article/details/8163731 中文版维护者: 张乐 Zhang Le <r0bertz@gentoo.org> 中文版翻译者: 张乐 Zhang Le <r0bertz@gentoo.org> 中文版校译者: 王聪 Wang Cong <xiyou.wangcong@gmail.com>                wheelz <kernel.zeng@gmail.co…
Chinese translated version of Documentation/CodingStyle   If you have any comment or update to the content, please post to LKML directly. However, if you have problem communicating in English you can also ask the Chinese maintainer for help.  Contact…
文章目录 从编码风格错误开始 快速修改编码风格的工具 scripts/checkpatch.pl scripts/Lindent astyle Linux 内核代码风格 1) 缩进 2) 把长的行和字符串打散 3) 大括号和空格的放置 3.1) 空格 4) 命名 5) Typedef 6) 函数 7) 集中的函数退出途径 8) 注释 9) 你已经把事情弄糟了 10) Kconfig 配置文件 11) 数据结构 12) 宏,枚举和RTL 13) 打印内核消息 14) 分配内存 15) 内联弊病 1…
通过从代码层面分析Linux内核启动来探知操作系统的启动过程 前言说明 本篇为网易云课堂Linux内核分析课程的第三周作业,我将围绕Linux 3.18的内核中的start_kernel到init进程启动过程来深入探知操作系统的启动,文中的代码来自Linux Kernel Organization的3.18.9内核源码 本篇关键词:init进程,idle进程,Linux内核启动 分析 分析说明 分析过程将把主要精力放在关键代码的分析上,代码分析的方式我是采用注释说明的方法,这样比较简洁直观,对于…
这是我第三次阅读linux内核代码完全注释了,当然前两次也没有读完,第一次读到第五章,第二次第七章. 所以说,赵炯博士对我最大的帮助时介绍了intel386的结构,以及内核编程的方法. 至于真正的内核源代码,我还真没看多少. 前几天,就是上周周日,我终于完成我梦想的一小段的了,我的梦想是什么呢? 不妨贴一贴一年前发的微博. 我想做自己的计算机系统,本来这应该是一个简单的梦想,但是随着人们对效率的追求,如今的CPU再也不是典型的 架构,超流水线,寄存器重命名,乱序,预测. 如今,指令集作为软件和硬…
朱宇轲 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 在本次的实验中,我们将通过简单分析Linux内核代码来探讨操作系统的启动过程. 计算机启动的过程其实在Andrew S.Tanenbaum所著的<现代操作系统>(中文版第18页)中就有大略的描述: 1.计算机启动时,存储在RAM中的BIOS程序检查计算机的所有设备,包括RAM.键盘.鼠标.ISA及PCI总线上的设…
http://blog.chinaunix.net/uid-20729583-id-1884617.html http://www.linuxidc.com/Linux/2014-08/105510.htm Linux内核代码的调试非常麻烦,一般都是加printk, 或者用JTAG调试.这里的方法是用QEMU来调试Linux内核.因为QEMU自己实现了一个gdb server, 所以可以非常方便的使用gdb来调内核. 这对内核的学习也非常有帮助. 为了尽量不多花时间在QEMU设置上,这里直接使用…
https://daniel.haxx.se/docs/sshproxy.html netsh wlan set hostednetwork mode=allow ssid=mywifi  key=12345678 开启成功后,网络连接中会多出一个网卡为“Microsoft Virtual WiFi Miniport Adapter”的无线连接2 单击已连接到Internet的网络连接,选择“属性”→“共享”,勾上“允许其他······连接(N)”并选择“无线连接2”. 如果此步报错,看服务里面…
在linux内核代码开发中,头文件不能包含标准C头文件,只能采用GNC标准 而且内核开发中没有main函数,只有init 和 exit ,这是每个内核模块中必须要包含的函数模块. 在GNU C标准中,打印信息采用printk函数,printk函数有8种级别. 内核模块的编译采用Makefile来编译,利用内核的module中的makefile来编译 #include <linux/init.h> #include <module.h> //GPL是一种开源协议,这个必须要添加 MO…
全局描述符表GDT(Global Descriptor Table): (1)在整个系统中,全局描述符表(注意这里是表,表只有一张)GDT只有一张(一个处理器对应一个GDT). (2)GDT可以被放在内存的任何位置,但CPU必须知道GDT的入口,也就是基地址放在哪里,Intel的设计者门提供了一个寄存器GDTR用来存放GDT的入口地址,程序员将GDT设定在内存中某个位置之后,可以通过LGDT指令将GDT的入口地址装入此积存器,从此以后,CPU就根据此寄存器中的内容作为GDT的入口来访问GDT了.…
linux内核代码注释 第三章引导启动程序 boot目录中的三个汇编代码文件   bootsect.s和setup.s采用近似intel的汇编语法,需要8086汇编器连接器as86和ld86 head.s用GNU的汇编程序格式   并且运行在保护模式下,需要GNU的as进行编译.为AT&T语法的汇编语言程序.GNU只支持386后的cpu  不支持实模式下的程序 总体功能 pc加电->cpu进入实模式->从0xfff0开始执行程序代码(bios地址),进行系统检测,并在物理地址0处开始初…
Linux kernel coding style | Linux内核编码风格 This is a short document describing the preferred coding style for the linux kernel. Coding style is very personal, and I won't force my views on anybody, but this is what goes for anything that I have to be ab…
这是一个简短的文档,描述了linux内核的首选代码风格.代码风格是因人而异的,而且我 不愿意把我的观点强加给任何人,不过这里所讲述的是我必须要维护的代码所遵守的风格, 并且我也希望绝大多数其他代码也能遵守这个风格.请在写代码时至少考虑一下本文所述的 风格. 首先,我建议你打印一份GNU代码规范,然后不要读它.烧了它,这是一个具有重大象征性 意义的动作. 不管怎样,现在我们开始: 第一章:缩进 制表符是8个字符,所以缩进也是8个字符.有些异端运动试图将缩进变为4(乃至2)个字符 深,这几乎相当于尝…
一.整理下到目前为止的流程图 写到这,终于才把一些苦力活都干完了,也终于到了我们的内核代码部分,也终于开始第一次用 c 语言写代码了!为了这个阶段性的胜利,以及更好地进入内核部分,下图贴一张到目前为止的流程图.(其中黄色部分是今天准备做的事情) 二.先上代码 loader.asm ... ;加载kernel mov eax,0x9 ;kernel.bin所在的扇区号 0x9 mov ebx,0x70000 ;写入的内存地址 0x70000 mov ecx,200 ;读入的扇区数 call rd_…
首先在自己的程序中#include<errno.h> 添加打印errno的语句 printf("errno is: %d\n",errno); 根据errno的值查错. errno的不同值的含义: 以下来自linux 2.4.20-18的内核代码中的/usr如何查看errno 错误代码 /include/asm/errno.h #ifndef _I386_ERRNO_H #define _I386_ERRNO_H #define EPERM 1 /* Operation n…
Linux调试内核代码是非常麻烦.它们一般加printk, 或者使用JTAG调试. 这里的方法是使用QEMU为了调试Linux核心. 由于QEMU自己实现gdb server, 它可以容易地使用gdb要调整内核. 也很有帮助. 为了尽量不多花时间在QEMU设置上,这里直接使用下面的内核image: http://free-electrons.com/community/demos/qemu-arm-directfb/ 1. QEMU的安装 这个能够自己去QEMU的官网下载编译,假设自己手头上的发…
转自:http://blog.csdn.net/lee244868149/article/details/44302819 Linux内核的更新非常的快,如何快速的了解这些更新呢?最一般的办法就是把新旧版本的内核源码下载下来,然后利用BCompare或别的什么工具进行源码对比,但这明显比较费力耗时,而本文将介绍一种更快捷简单的方法. 在官方http://git.kernel.org/网站可以找到linux的各种git更新记录,比如virt/kvm/kvm.git,通过这个链接,可以看到kvm的各…
上文参考:http://www.cnblogs.com/long123king/p/3545991.html 先分析一下linker script的语法. #ifdef CONFIG_X86_32#define LOAD_OFFSET __PAGE_OFFSET#else#define LOAD_OFFSET __START_KERNEL_map#endif /* Text and read-only data */    .text :  AT(ADDR(.text) - LOAD_OFFSE…
#为了提高性能,文件系统一般都是以 relatime形式挂载进来的,见:/etc/fstab #更新一下mtime,这样,编译过程中用到的文件的atime都会被更新 find . -exec touch -m {} \; && touch ../tag make mrproper && make allnoconfig && make menuconfig #在allnoconfig的基础下,通过menuconfig加入如下配置,以方便调试 ********…
1.ARM的核心代码保存在arch/arm目录下 2.ARM SoC core architecture code保存在arch/arm目录下 3.ARM SOC的周边外设模块的驱动保存在drivers目录下 4.ARM SOC的特定代码在arch/arm/mach-xxx目录下…
http://blog.csdn.net/luckyaslan/article/details/7869235 Step 1:安装Source Insight并启动程序 可以进入图1界面,在工具条上有几个值得注意的地方,如图所示,图中内凹左边的是工程按钮,用于显示工程窗口的情况:右边的那个按钮按下去将会显示一个窗口,里边提供光标所在的函数体内对其他函数的调用图,通过点击该窗体里那些函数就可以进入该函数所在的地方. 图1 Source Insight界面图 由于Source Insight实质上是…
它的作用显而易见,那就是根据一个结构体变量中的一个域成员变量的指针来获取指向整个结构体变量的指针. typedef unsigned int __kernel_size_t; typedef __kernel_size_t size_t; #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) /** * container_of - cast a member of a structure out to the cont…
Perface 前面已经写过一篇<嵌入式linux内核的五个子系统>,概括性比较强,也比较简略,现在对其进行补充说明. 仅留此笔记,待日后查看及补充! Linux内核的子系统 内核是操作系统的核心.Linux内核提供很多基本功能,如虚拟内存.多任务.共享库.需求加载.共享写时拷贝(Copy-On-Write)以及网络功能等.增加各种不同功能导致内核代码不断增加. Linux内核把不同功能分成不同的子系统的方法,通过一种整体的结构把各种功能集合在一起,提高了工作效率.同时还提供动态加载模块的方式…
1.1 Linux 内核驱动中的奇怪语法 大家在看一些 GNU 开源软件,或者阅读 Linux 内核.驱动源码时会发现,在 Linux 内核源码中,有大量的 C 程序看起来“怪怪的”.说它是C语言吧,貌似又跟教材中的写法不太一样:说它不是 C 语言呢,但是这些程序确确实实是在一个 C 文件中.此时,你肯定怀疑你看到的是一个“假的 C 语言”! 比如,下面的宏定义: #define mult_frac(x, numer, denom)( \ { \ typeof(x) quot = (x) / (…
本文来源于linux内核代码的Document文件夹下的Hoto文件.Chinese translated version of Documentation/HOWTO If you have any comment or update to the content, please contact theoriginal document maintainer directly.  However, if you have a problemcommunicating in English yo…
Makefile不是Make Love 从前在学校,混了四年,没有学到任何东西,每天就是逃课,上网,玩游戏,睡觉.毕业的时候,人家跟我说Makefile我完全不知,但是一说Make Love我就来劲了,现在想来依然觉得丢人. 毫不夸张地说,Kconfig和Makefile是我们浏览内核代码时最为依仗的两个文件.基本上,Linux内核中每一个目录下边都会有一个 Kconfig文件和一个Makefile文件.对于一个希望能够在Linux内核的汪洋代码里看到一丝曙光的人来说,将它们放在怎么重要的地位都…
linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一部分:基础知识*** 总纲:内核世界的陷阱 源码阅读的陷阱 代码调试的陷阱 原理理解的陷阱 建立调试环境 发行版的选择和安装 安装交叉编译工具 bin工具集的使用 qemu的使用 initrd.img的原理与制作 x86虚拟调试环境的建立 arm虚拟调试环境的建立 arm开发板调试环境的建立 gdb基础 基本命令 gdb之gui gdb技巧 gdb宏 汇编基础--X86篇 用户手册 AT&…
转自http://blog.chinaunix.net/uid-20608849-id-3029223.html 在学习Linux内核代码的过程中,定会参考很多书籍以及网路资源,但是并不是所有的书籍和资源都能够帮助你前进,或者说是能够将你引导向正确而高效的道路. 在学习的一些阶段可能会需要不同的书,比如在第一个阶段,一些基本的书籍都是可以参考的.这个阶段的书籍非常多,比如<鸟哥的linux私房菜>,它介绍了Linux系统的基本概念和使用.<高级Bash脚本编程指南>可以说是学习Sh…
如果想评论或更新本文的内容,请直接联系原文档的维护者.如果你使用英文 交流有困难的话,也可以向中文版维护者求助.如果本翻译更新不及时或者翻 译存在问题,请联系中文版维护者.   英文版维护者: Greg Kroah-Hartman <greg@kroah.com> 中文版维护者: 李阳 Li Yang <leoli@freescale.com> 中文版翻译者: 李阳 Li Yang <leoli@freescale.com> 中文版校译者: 钟宇 TripleX Chu…