主题:	1. 嵌入式基础知识
2. linux内核介绍
3. 内核的编译和安装(x86)
4. 第一个模块
5. 模块的相关工具
6. 模块的符号导出
7. 模块的參数 1.看linux/module.h。
这个文件所在的位置:/home/zshh/work/driver/kernel/linux-3.5/include/linux 重点看module结构体(模块的计数就在module结构体中)
再module这个结构体中包括模块的状态,模块的初始化话函数指针的定义,
还由exit函数指针的定义.
当中还包括对内核參数的操作,struct kernel_param *kp 这个结构体的定义例如以下:
struct kernel_param{
const char *name;
const struct kernel parm_ops *ops;
u16 perm;
s16 level;
union
{
void *arg;
const struct kparam_string *str;
const struct kparam_array * arr;
};
}; const struct kernel parm_ops *ops;
这个函数包括了一些读写參数的相关操作.
struct kernel_param_ops
{
int (*set)(const char* val, const struct kernel_param *kp) int (*set)(char *buffer, const struct kernel_param *kp) void(*free)(void * arg) } 2.看__init宏 #define __init _section(.init.text)
#define __section(s) __attribute__((__section__(#S))) 这个宏最红替换出来就是 __attribute__((__section__(".init.text") 代表他会被存放再.init.text.
__init, __initdata等属性标志,
是要把这样的属性的代码放入目标文件的.init.text节,
数据放入.init.data节──这一过程是通过编译内核时为相关目标平台提供了xxx.lds链接脚本来指导ld完毕的。 //这个函数的运行分两种情况例如以下:
一:当编译为模块的时候.使用insmod,或者是modprob插入模块到内核的时候,他会被运行.
假设插入成功, __init属性的函数就被运行; 二:当代码被编译进入zImage中是,再内核引导时,运行
do_basic_setup()函数调用do_initcalls函数,.init节的全部函数都会被运行一遍.
在初始化完毕后,用这些keyword标识的函数或数据所占的内存会被释放掉。
三:全部的__init函数在initcall.init都有一个指针指向它. 3.看linux/list.h 4.实验模块參数的bool型。測试可否使用0/1,y/n等;
假设模块的參数为数组。则须要使用module_param_array宏来声明
自己写个样例。測试该宏的使用 1. 嵌入式基础知识
=======================
嵌入式行业的当前发展情况,嵌入式系统构成等 2.linux内核的说明
=======================
kernel文件夹下有两个内核,一个是从www.kernel.org下载的标准内核。一个是由google改动、三星移植的内核;
解压缩内核后说明一下文件夹结构,并介绍内核的核心功能 3.内核的编译安装(x86)
=======================
(1)内核的配置
$>make menuconfig
通过图形界面(依赖于ncurses库)。决定编译的内核都包括哪些部分。
终于的配置结果。存储在.config文件里
决定代码是否编译,假设编译。是编译到zImage中,还是编译为.ko模块 (2)内核的编译
$>make
编译生成zImage内核和.ko模块 (3)内核模块的安装
$>make modules_install
将生成的.ko安装到磁盘上的特定位置(就是拷贝)
通常是/lib/modules/xxx/文件夹(xxx为编译的内核的版本号) (4)内核的安装
$>make install
将生成的zImage安装到/boot文件夹下
(zImage在x86上称为bzImage,位于arch/x86/boot/文件夹下) 接下来能够又一次启动系统,看看新编译的内核是否能使用(要看运气) 4.第一个模块
=========================
參考x86-drv/01mod/文件夹下的mod_test01.c和Makefile
认真了解这两个文件里每部分的作用 5. 模块的相关工具(5个)
=========================
(1)模块的手工载入
$>insmod mod_test01.ko
会调用模块的入口函数。假设是printk的信息。用$>dmesg查看 (2)模块的手工卸载
$>rmmod mod_test01 (3)显示模块信息
$>modinfo xxx.ko (4)列出内核中已经载入的模块
$>lsmod (5)自己主动载入模块
模块的自己主动载入工具。该工具能够自己主动将模块所依赖的模块也一起载入。
modprobe仅仅能载入/lib/modules/xxx下的模块。
$>modprobe xxx //载入
$>modprobe -r xxx //卸载 tip:
$>dmesg
显示printk的信息
$>dmesg -c
清除printk的缓冲区 6.模块的符号导出
==========================
为了避免命名空间污染,内核规定,.ko模块中的全部符号默认都为局部。必须通过EXPORT_SYMBOL宏导出后。才具有全局属性;
EXPORT_SYMBOL宏可用于全局函数和全局变量; 写01mod/mod_test02.c和mod_test03.c
生成模块mod_test02.ko和mod_test03.ko
能够用insmod/rmmod或modprobe測试 $>make install //运行Makefile中的目标install
$>modprobe mod_test03
会把依赖的mod_test02也载入 $>modprobe -r mod_test03
用-r能够卸载模块 7.模块的參数
=========================
用module_param宏来声明模块參数
參考01mod/mod_test04.c 模块參数相应的文件是/sys/module/mod_test03/parameters/name和value
module_param宏的第3个參数,就用来确定这两个文件的permission

linux内核模块笔记的更多相关文章

  1. linux学习笔记全-如何学习linux?

    简介 今天整理文件整理出了好多年前学习linux的笔记 就整理下发布在博客上怕文件形式会误删. linux入门基础对于新手而言不推荐看书!!不推荐看书!!(大牛跳过)先看视频看linuxcast的视频 ...

  2. Linux内核模块学习

    注:本文是<Linux设备驱动开发详解:基于最新的Linux 4.0内核 by 宋宝华 >一书学习的笔记,大部分内容为书籍中的内容. 书籍可直接在微信读书中查看:Linux设备驱动开发详解 ...

  3. Linux内核笔记--内存管理之用户态进程内存分配

    内核版本:linux-2.6.11 Linux在加载一个可执行程序的时候做了种种复杂的工作,内存分配是其中非常重要的一环,作为一个linux程序员必然会想要知道这个过程到底是怎么样的,内核源码会告诉你 ...

  4. Linux 学习笔记

    Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...

  5. linux学习笔记2-linux的常用命令

    第一篇博客:linux学习笔记1-ubuntu的安装与基本设置 之中,已经介绍了如何安装linux操作系统,以及一些基本的设置修改. 本篇博客主要介绍linux中的一些常用的终端命令 ======== ...

  6. Linux学习笔记(一)2015.4.13

    研究生由单片机转Linux学习 首先安装VMware虚拟机,用的是VMware 10.0 在VMware 10.0上安装视频上推荐的Red Hat Linux 5 安装后正式进入Linux学习 笔记1 ...

  7. 跟着鸟哥学Linux系列笔记3-第11章BASH学习

    跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 跟着鸟哥学Linux系列笔记1 跟着鸟哥学Linux系列笔记2-第10章VIM学习 认识与学习bash 1. ...

  8. 跟着鸟哥学Linux系列笔记2-第10章VIM学习

    跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 跟着鸟哥学Linux系列笔记1 常用的文本编辑器:Emacs, pico, nano, joe, vim VI ...

  9. 跟着鸟哥学Linux系列笔记0-如何解决问题

    跟着鸟哥学Linux系列笔记0-扫盲之概念 在发生问题怎么处理: 1.  在自己的主机.网络数据库上查询How-To或FAQ -Linux 自身的文件数据: /usr/share/doc -CLDP中 ...

随机推荐

  1. jboss final 7.1.1相关error以及解决方式

    问题1 报错提示: MSC00001: Failed to start service jboss.web.deployment.default-host./: Caused by: java.lan ...

  2. 安装ftp碰到的问题及解决方法

    1   CRT显示乱码:     本地windows机器.改动SecureCRT的设置.找到"选项"->"会话选项"->"外观" ...

  3. iOS-为方便项目开发在pch加入一些经常使用宏定义

    1.关于NSLog输出 /** * 当Xcode为Release时不输出,为Debug时输出 * * @param ... * * @return */ #ifndef __OPTIMIZE__ #d ...

  4. 2015.04.28,外语,读书笔记-《Word Power Made Easy》 12 “如何奉承朋友” SESSION 36

    1. the great and the small 拉丁词语animus(mind的意思),animus和另一个拉丁词根anima(life principle.soul.spirit),是许多单词 ...

  5. python spark kmeans demo

    官方的demo from numpy import array from math import sqrt from pyspark import SparkContext from pyspark. ...

  6. USACO 2.2 Preface Numbering

    Preface Numbering A certain book's prefaces are numbered in upper case Roman numerals. Traditional R ...

  7. C#读出文本文件内容,遍历数组筛选出 含有汉字对应的拼音字符

    情景描述:由于任务需要,现有一用户表数据,用户名 字段 在新增用户时,输入中文和拼音两种,先要区分同时含有中文和拼音字母的用户名.由于数据很多,可以通过一段代码完成查询: 前提:在阅读本文之前可以先了 ...

  8. 2.Matlab数值数组及其运算

    2.1引导 2.2一维数组的创建与寻访 2.3二维数组的创建 2.4二维数组元素的标识 2.5二维数组的子数组寻访和赋值 2.6执行数组运算的常用函数 2.7数组运算和矩阵运算 2.8多项式的表达和创 ...

  9. HttpClient连接超时及读取超时

    HttpClient连接超时及读取超时 httpClient在执行具体http请求时候 有一个连接的时间和读取内容的时间: HttpClient连接时间 所谓连接的时候 是HttpClient发送请求 ...

  10. Session会在浏览器关闭后消失吗?

    转  http://blog.csdn.net/rongwenbin/article/details/51784310 Cookie的两种类型   在项目开发中我们时常将需要在客户端(浏览器)缓存的数 ...