linux 内核 linux kernel travel

linux 内核 kernel_核 travel_旅行 linux kernel travel

linux 2.6

1

hellomod.c

001

// hello world driver for linux 2.6

#include <linux/module.h>                  /*所有模块都要使用头文件module.h*/

#include<linux/kernel.h>               /*kernel.h包含了常用的内核函数*/

#inlcude<linux/init.h>            /* init.h 包含了宏 _init和_exit 它们容许释放内存*/

/* 头文件*/

static int_init lkp_init(void)

{

printk("<1>hello,world! from the kernel space... \n");     /* 模块初始化,printk函数

相当于C语言中的printf输出 函数,<1>立即输出*/

return 0;

}

static void_exit lkp_cleanup(void)

{

printk("<1>Goodbye,world! leaving kernel space...\n");

}

module_init(lkp_init);                             /* 入口点*/

module_exit(lkp_cleanup);                    /* 可加载模块,内核在此处调用 lkp_cleanup 函数*/

MODULE_LICENSE("GPL");                   /* 提示没有GNU公共许可证*/

module_init() 和 cleanup_exit

module_init() 向内核注册模块所提供的新功能

cleanup_exit() 注销由模块提供的新功能

C语言应用程序     内核模块程序

使用函数       Libc库                 内核函数

运行空间       用户空间              内核空间

运行权限       普通用户              超级用户

入口函数       main()                  module_init()

出口函数       exit()                    module_exit()

编译              Gcc-c                   makefile

连接              Gcc                      insmod

运行              直接运行               insmod

调试              Gdb                      kdbug kdb kgdb

时间: 2024-08-10 02:11:23

linux 内核 linux kernel travel的相关文章

Linux内核线程kernel thread详解--Linux进程的管理与调度(十)

日期 内核版本 架构 作者 GitHub CSDN 2016-06-02 Linux-4.5 X86 & arm gatieme LinuxDeviceDrivers Linux进程管理与调度-之-进程的描述 内核线程 为什么需要内核线程 Linux内核可以看作一个服务进程(管理软硬件资源,响应用户进程的种种合理以及不合理的请求). 内核需要多个执行流并行,为了防止可能的阻塞,支持多线程是必要的. 内核线程就是内核的分身,一个分身可以处理一件特定事情.内核线程的调度由内核负责,一个内核线程处于阻

Linux内核(1) - Kernel地图:Kconfig与Makefile

Makefile不是Make Love 从前在学校,混了四年,没有学到任何东西,每天就是逃课,上网,玩游戏,睡觉.毕业的时候,人家跟我说Makefile我完全不知,但是一说Make Love我就来劲了,现在想来依然觉得丢人. 毫不夸张地说,Kconfig和Makefile是我们浏览内核代码时最为依仗的两个文件.基本上,Linux内核中每一个目录下边都会有一个Kconfig文件和一个Makefile文件. 对于一个希望能够在Linux内核的汪洋代码里看到一丝曙光的人来说,将它们放在怎么重要的地位都

[linux内核]linux内核编程规范

1,__attrubte__关键字的作用 点击打开链接 __attrubte__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐.struct str_struct{        __u8    a;        __u8    b;        __u8    c;        __u16   d;} __attribute__ ((packed));以上结构体的大小为5/*  当用到typedef时,要特别注意__attribut

[linux内核][LINUX内核编程]学习笔记(二)

linux内核————队列 linux内核——队列 定义: [cpp] view plaincopy struct __kfifo{ unsigned int in;  //入队偏移,写索引 unsigned int out;  //出队偏移,读索引 unsigned int mask; unsigned int esize; void *data; } 使用: 创建一个队列,该函数创建并初始化一个大小为size的kfifo: [cpp] view plaincopy 38 int __kfif

[linux内核][linux]linux内核时间管理基础

一,linux时间管理基础http://blog.csdn.net/droidphone/article/details/7975694http://blog.csdn.net/smilingjames/article/details/6205540linux所有时间基础都是以低层硬件为基础的,低层硬件有GPT和cpu local timer,比如GPT的时钟源为13M HZlinux低层时间的架构分为clock source,clock event device,clock source上层分

Linux 内核(kernel)

1.内核是什么,内核是操作系统的核心.在Linux中,其实内核就是系统上面的一个文件而已,这个文件包含了驱动主机各项硬件的检测程序与驱动模块.内核文件就是在/boot 目录下以vmlinuz开头的文件,有时候会发现boot下有好几个以vmlinuz开头的文件,说明可以有多个内核,不过启动的时候只能选择一个来加载,Linux是单内核.模块化体系的.输出的三列信息分别为模块名称.占用内存大小.是否在被使用,如果第三列为0,则该模块可以随时卸载,非0则无法执行modprobe删除模块.2.查看已经加载

[linux内核][linux中断]——软中断机制

点击打开链接 一,linux软中断的概念软中断(softirq)常常表示可延迟函数的所有种类,目前linux上使用的软中断个数是有限的,linux最多注册32个,目前使用了10个,在interrupt.h中定义,中断上下文:表示内核当前正在执行一个中断处理程序或者一个可延迟函数.软中断(即使同一类型的软中断)可以并发运行在多个CPU上,因此软中断是可重入函数必须使用自旋锁保护其数据结构.一个软中断不会去抢占另外一个软中断. 软中断和tasklet的区别由于软中断必须使用可重入函数,这就导致设计上

[linux内核]linux各个内核配置选项的含义以及配置

1,linux各个内核配置选项的含义 linux各个内核配置选项含义 2,make menuconfig命令的使用 Y表示加载,N表示不加载,M表示的是作为模块的方式载入内核. 3,以模块方式载入的时候如何动态加载 如何动态加载模块

[linux内核]linux中断下半部分——工作队列

一:工作队列概念 工作队列可以把工作推后,交由一个内核线程去执行,工作队列运行在进程上下文中,工作队列运行重新调度甚至睡眠内核驱动程序一般将下半部分交给内核缺省的工作者线程去做 二:驱动中使用工作队列的步骤 1,声明一个work_struct结构体 [cpp] view plaincopy struct work_struct work; 2,动态创建一个由work指向的工作,处理函数为func [cpp] view plaincopy INIT_WORK(struct work_struct