摘要:原文:http://blog.csdn.net/linweig/article/details/5761624内核编译链接过程是依靠vmlinux.lds文件,以arm为例vmlinux.lds文件位于kernel/arch/arm/vmlinux.lds,vmlinux-armv.lds的生成过程在kernel/arch/arm/Makefile中ifeq ($(CONFIG_CPU_32),y)PROCESSOR = armvTEXTADDR = 0xC0008000LDSCRIPT = arch/arm/vmlinux-armv.lds.inendifarch/arm/vmlinux.l
阅读全文
摘要:1 简单配置Ubuntu9.10以前的版本grub的配置文件是menu.lst,到了ubuntu9.10的时候就更名为grub.cfg了。在ubuntu中,grub.cfg就相当于windows系统下的boot.ini文件.sudo vim /boot/grub/grub.cfg 在### BEGIN /etc/grub.d/00_header ###后面的部分主要记录了一些启动默认信息。在if [ -s $prefix/grubenv ]; then load_envfiset default="0"这句中,default="0"表示从启动项中的第一个
阅读全文
摘要:主题: linux内核模块的程序结构--模块加载函数(必须),模块卸载函数(必须),模块许可证声明(必须),模块参数(可选),模块导出符号(可选),模块作者的等信息声明(可选)一个linux内核模块主要由以下几个部分组成。1、模块加载函数"用module_init()来指定"(必须) 当通过insmod和modprobe命令加载内核模块时,模块的加载函数会自动被内核执行,完成本模块的相关初始化工作。linux模块加载函数一般以 __init表示声明。典型声明如下::static int __init initialization_function(void){ /*初始化代
阅读全文
摘要:Linux 2.6 下内核模块的Makefile# Makefile 2.6obj-m += hello.oKDIR:=/lib/modules/$(shell uname -r)/build# PWD=$(shell pwd)all: make -C $(KDIR) M=$(PWD) modulesclean: make -C $(KDIR) M=$(PWD) cleanobj-m := hello.o表示编译后生成hello.o模块。$(KDIR) 指定了内核源码的路径,“M=”表示这是个外部模块,M=$(PWD) 指定了该模块文件所在的路径。注:makefil...
阅读全文
摘要:本文是基于2.6的内核,也建议各位可以先看一下《Linux内核设计与实现(第二版)》作为一个基础知识的铺垫。当然,从实践角度来看,只要按着以下的步骤去做也应该可以实现成功编译内核及加载模块。个人用的Linux版本为:Debian GNU/Linux,内核版本为:2.6.20-1-686. 第一步,下载Linux内核的源代码,即构建LDD3(Linux Device Drivers 3rd)上面所说的内核树。如 过安装的Linux系统中已经自带了源代码的话,应该在/usr/src目录下。如果该目录为空的话,则需要自己手动下载源代码。下载代码的方法和链接很 多,也可以在CU上通过http:/...
阅读全文
摘要:在linux 内核中有一个大名鼎鼎的宏container_of(),这个宏是用来干嘛的呢?我们先来看看它在内核中是怎样定义的。呵呵,乍一看不知道是什么东东。我们先来分析一下container_of(ptr,type,member),这里面有ptr,type,member分别代表指针、类型、成员。看一个例子:Struct test{ int i; int j; char k;};Struct test temp;现在呢如果我想通过temp.j的地址找到temp的首地址就可以使用container_of(&temp.j,struct test,j);现在我们知道container...
阅读全文