在编译linux内核时,遇到了一个比较诡异的问题.具体log如下: Can't locate strict.pm in @INC (you may need to install the strict module) (@INC contains: //usr/lib/perl/site_perl/5.22.1 //usr/lib/perl/vendor_perl/5.22.1 //usr/lib/perl/5.22.1 /tmp/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx…
你想知道如何成为一个Linux内核开发者么?或者你的老板告诉你,“去为这个设备写一个Linux驱动.“这篇文档的目的,就是通过描述你需要 经历的过程和提示你如何和社区一起工作,来教给你为达到这些目的所需要知道的所有知识.本文也尝试解释社区为什么这样工作的一些原因.内核几乎全 是用C写成的,有一些架构相关的部分是用汇编语言写成的.熟练掌握C语言是内核开发的必备条件.汇编语言(任何架构)的了解不是必须的,除非你准备做某个 架构的底层开发.虽然下面这些书不能完全代替扎实的C语言教学和/或者成年累月的经…
转自:http://www.cnblogs.com/armlinux/archive/2011/11/06/2396787.html 1.       内核启动地址1.1.   名词解释ZTEXTADDR 解压代码运行的开始地址.没有物理地址和虚拟地址之分,因为此时MMU处于关闭状态.这个地址不一定时RAM的地址,可以是支持读写寻址的flash等存储中介. Start address of decompressor. here's no point in talking about virtua…
1.1 Linux 内核驱动中的奇怪语法 大家在看一些 GNU 开源软件,或者阅读 Linux 内核.驱动源码时会发现,在 Linux 内核源码中,有大量的 C 程序看起来“怪怪的”.说它是C语言吧,貌似又跟教材中的写法不太一样:说它不是 C 语言呢,但是这些程序确确实实是在一个 C 文件中.此时,你肯定怀疑你看到的是一个“假的 C 语言”! 比如,下面的宏定义: #define mult_frac(x, numer, denom)( \ { \ typeof(x) quot = (x) / (…
原文网址:http://blog.csdn.net/nexttake/article/details/8181008 刚看 O’REILLY 写的<LINUX 设备驱动程序>时.作者一再强调在编写驱动程序时必须 建立内核树.所谓内核树,我的理解和网上资料说的一致就是内核源码的一种逻辑形式. 先查看自己OS使用的内核版本shana@shana:~$ uname -r2.6.22-14-generic           /*  这是我显示的结果 */如果安装系统时,自动安装了源码.在 /usr/…
http://blog.csdn.net/embededswordman/article/details/6704197 uImage的制作是使用的u-boot工具mkimage,build完u-boot后也会将mkimage build出來到/tools目录下,可以直接拿來用,它的作用就是在zImage的前面加上64个字节的头,让u-boot能够识别要加载内核的类型.加载地址等. 基本格式:mkimage -A arch -O os -T type -C comp -a addr -e ep…
NULL指针一般都是应用于有效性检测的,其实这里面有一个约定俗成的规则,就是说无效指针并不一定是 NULL,只是为了简单起见,规则约定只要指针无效了就将之设置为NULL,结果就是NULL这个指针被用来检测指针有效性,于是它就不能用作其它了,而实际上NULL就是0,代表了数值编号为0的一个内存地址,抛开那个约定,它和别的addr没有任何区别,简单的说,完全可以选择一个其它的地址作为指针有效性检测,比如0x1234等等,不选其它地址的原因就是第一,NULL比较好记忆,第二,由于NULL就是0,因此很…
  本文,我们将一步一步地介绍如何从源代码编译和安装一个Linux内核.需要注意的是本指导基于Ubuntu 20.04版本编译安装,其它发行版可能会有差异. 在前面文章中我们反复提到过Linux内核,知道Linux内核才是Linux操作系统最为核心的内容.内核实现了对硬件的管理,为应用软件提供了使用硬件的接口. 对于Linux开发人员而言,内核的学习和开发才是终极目标.因此我们今天先介绍一下内核的编译. 需要知道的是,Linux内核的编译和安装并非想象的那么难,那么复杂,其实只需要几条命令就可以…
Mac下重新编译Linux内核 操作系统实验,要求添加系统调用并重新编译内核,这里记录一下编译内核的过程 0.下载VirtualBox 博主一直用parallel desk,但因为驱动等问题,在PD上重新编译后无法出现图形界面,所以建议采用绝缘性较好的VirtualBox来编译内核. 1.下载内核 从Linux的官网http://www.kernel.org下载内核代码即可,注意版本号,建议用比较新的Ubuntu系统的话就采用新的内核. 这里博主遇到了一个坑,在16.04的Ubuntu下编译3.…
构造一个简单的Linux系统MenuOS linux内核目录结构 arch目录包括了所有和体系结构相关的核心代码.它下面的每一个子目录都代表一种Linux支持的体系结构,例如i386就是Intel CPU及与之相兼容体系结构的子目录.PC机一般都基于此目录. include目录包括编译核心所需要的大部分头文件,例如与平台无关的头文件在include/linux子目录下. init目录包含核心的初始化代码(不是系统的引导代码),有main.c和Version.c两个文件.这是研究核心如何工作的好起…