国嵌linux内核编程,国嵌视频学习笔记---linux内核开发1

一、linux内核简介

1.linux系统由两部分组成:内核空间和用户空间。

2.用户空间包括:用户应用程序和C库

3.内核空间包括:系统调用接口、内核和体系结构相关代码。

3d272c0704aafc02503e7d074c37f365.png

4.ARM处理器7种工作模式:用户模式,快速中断模式、外部中断模式、管理模式、数据访问终止、系统模式、未定义指令异常

5.为什么linux系统划分为用户空间和内核空间?

出于安全的考虑,linux利用处理器的分级的工作模式的特点,使用其中两级分别运行内核和应用程序。使操作系统得到充分保护。

6.系统调用和硬件中断:使程序执行在内核空间和用户空间两个状态切换。

7.Linux内核结构(组成):

系统调用接口:连接内核空间与用户空间

进程管理:进程创建、进程通信、进程调度

内存管理:内存分配回收、地址转换(虚-物理)

体系结构相关代码:CPU相关代码

设备驱动:

网络协议栈:

虚拟文件系统:

ce51a2156b4015077375fca3f4c95667.png

033b9d17ccb6bc3eb25e3c4cb0a97383.png

二、内核源代码

e5d3e8af1e43b5e4561d8264559fe6b5.png

arch:architecture缩写。体系结构相关代码。

block:部分块设备驱动。

crypto:加密。

drivers:设备驱动

fs:文件系统

include:内核需要的头文件

lib:库文件

mm:内存管理代码(与体系结构无关的)

三、内核配置与编译

1.清除临时文件、中间文件、配置文件

make clean:删除大部分中间生成的文件保存配置文件.o

make mrproper:删除中间文件及配置文件

make distclean:在mrproper基础上删除补丁、编辑器备份等。

2.配置内核

make config:基于文本模式的交互式配置

make menuconfig:基于文本模式的菜单型配置(菜单由内核内scripts生成)

make oldconfig:使用已有的配置文件(.config)

make xconfig:图形化配置

3.如何配置

Arch/$cpu/configs目录下有供参考的配置文件。可以在此基础上修改,进行配置。

4.编译内核

x86:

make zImage:x86下只能用于小于512k的内核。

make bzImage。

如需获取详细编译信息,后面添加V=1,如

make zImage V=1

5.编译内核模块:(必须先编译内核)

make modules

6.安装内核模块:

make modules_install

四、Linux内核模块开发

1.什么是内核模块(特点)

模块本身不被编译进内核

可以根据需求,在内核运行期间动态的安装或卸载

2.内核模块程序

模块加载函数(必须):通过module_init宏指定。

模块卸载函数(必须):通过module_exit宏指定。

3.内核模块编译

通过makefile

单个文件的

ifneq ($(KERNELRELEASE),)

obj-m := hello.o

else

KDIR :=/lib/modules/2.6.18-53.e15/build //内核源代码的路径

all:

make -C $(KDIR) M=$(PWD) modules //进入-C后面的目录,使用其makefile编译;内核模块代码的位置,PWD=当前目录

clean:

rm -f *.ko *.o *.mod.o *.mod.c *.symvers

endif

多个文件的

ifneq ($(KERNELRELEASE),)

obj-m := hello.o //内科模块的名字

hello-objs := main.o add.o //内核模块需要的源文件

else

KDIR :=/lib/modules/2.6.18-53.e15/build //内核源代码的路径

all:

make -C $(KDIR) M=$(PWD) modules //进入-C后面的目录,使用其makefile编译;内核模块代码的位置,PWD=当前目录

clean:

rm -f *.ko *.o *.mod.o *.mod.c *.symvers

endif

4.内核模块的安装与卸载

insmod  加载

rmmod 卸载

lsmod  查看

modprobe 加载:会查看依赖的模块,并首先加载

5.模块可选信息

许可证声明:MODULE_LICENSE("GPL")

作者声明:MODULE_AUTHOR

………………

模块参数:module_param指定模块参数,用于在加载模块是传递参数给模块。

module_param(name,type,perm)

name:模块参数的名称

type:参数的类型  bool,int,charp

perm:模块参数的访问权限 S_IRUGO :任何用户都有读权限 S_IWUSR

int a=3;

char *st;

module_param(a,int,S_IRUGO);

module_param(st,charp,S_IRUGO);

6.内核符号导出

EXPORT_SYMBOL(符号名)

EXPORT_SYMBOL_GPL(符号名):只能用于包含GPL许可证的模块。

7.内核版本不匹配问题

内核模块的版本由所依赖的内核代码版本决定。

当前正在运行的内核的版本。

insmod程序在这两个版本不同时,会出现错误。

解决办法:

(1)使用modprobe  --force-modversion强行加载

(2)确保相同,uname  -r可以查看当前运行的内核版本。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
入式Linux视频教程全套2011新版,强烈推荐!!! 视频1.iso -学习方法与课程体系介绍(学前必看) -学习方法介绍.avi -入式课程体系.pdf -入式Linux学习方法.pdf -课程1-入式入门体验班(上) -第1天(入式系统概述) -体验入门班-1-1(入式系统概述).avi -体验入门班-1-2(ARM概述).avi -体验入门班-1-3(入式Linux概述).avi -体验入门班-1-4(2440开发板介绍).avi -体验入门班-1-5(软硬件环境搭建).avi -第2天(开发板快乐体验) -体验入门班-2-1(开发板系统安装).avi -体验入门班-2-1(开发板系统安装-Jlink方式).avi -体验入门班-2-1(开发板系统安装-并口方式).avi -体验入门班-2-2(裸机程序体验).avi -体验入门班-2-3(QT系统体验).avi -体验入门班-2-4(Android系统体验).avi 视频2.iso -课程1-入式入门体验班(下) -第3天(Linux系统体验) -体验入门班-3-1(Linux定制安装).avi -体验入门班-3-2(Linux命令).avi -体验入门班-3-3(VI使用).avi -体验入门班-3-4(Linux系统管理).avi -体验入门班-3-5(Shell编程).avi -体验入门班-3-6(Qcd功能演示).avi -体验入门班-3-7(必修实验).avi -课程2-入式Linux应用开发班 -第1天(编程基础) -应用班-1-1(GCC程序编译).avi -应用班-1-2(GDB程序调试).avi -应用班-1-3(makefile工程管理).avi -应用班-1-4(必修实验).avi -第2天(文件时间编程) -应用班-2-1(系统调用方式访问文件).avi -应用班-2-2(库函数访问文件).avi -应用班-2-3(时间编程).avi -应用班-2-4(必修实验).avi -第3天(多进程程序设计) -应用班-3-1(进程控制原理).avi -应用班-3-2(进程控制程序设计).avi -应用班-3-3(必修实验).avi -第4天(进程间通讯) -应用班-4-1(进程间通讯概述).avi -应用班-4-2(管道通讯).avi -应用班-4-3(信号通讯).avi -应用班-4-4(共享内存通讯).avi -应用班-4-5(必修实验).avi -第5天(进程间通讯) -应用班-5-1(消息队列).avi -应用班-5-2(信号量).avi -应用班-5-3(必修实验).avi -第6天(进程间通讯) -应用班-6-1(线程基础).avi -应用班-6-2(多线程程序设计).avi -应用班-6-3(必修实验).avi -第7天(网络编程) -应用班-7-1(Linux网络概述).avi -应用班-7-2(Linux网络编程基础).avi -应用班-7-3(TCP程序设计).avi -应用班-7-4(UDP网络程序设计).avi -应用班-7-5(并发服务器).avi -应用班-7-6(必修实验).avi 视频3.iso -课程3-ARM系统进阶班 -第1天(ARM系统开发基础) -ARM系统精讲班-1-1(ADS集成开发环境).avi -ARM系统精讲班-1-2(ARM工作模式).avi -ARM系统精讲班-1-3(ARM寄存器).avi -ARM系统精讲班-1-4(ARM寻址方式).avi -ARM系统精讲班-1-5(ARM汇编指令详解).avi -第2天(ARM系统开发基础) -ARM系统精讲班-2-1(ARM汇编指令详解).avi -ARM系统精讲班-2-2(ARM伪指令).avi -ARM系统精讲班-2-3((混合编程).avi -ARM系统精讲班-1-8(必修实验).avi -第3天(LED驱动程序设计) -ARM系统精讲班-2-1(GPIO).avi -ARM系统精讲班-2-2(LED控制程序设计).avi -ARM系统精讲班-2-3((LED闪烁).avi -第4天(LED与按键驱动程序设计) -ARM系统精讲班-4-1(ARM中断控制系统).avi -ARM系统精讲班-4-2(按键控制程序设计).avi -ARM系统精讲班-2-6(必修实验).avi -第5天(定时器与时钟驱动程序设计) -ARM系统精讲班-5-1(ARM时钟体系).avi -ARM系统精讲班-5-2(定时器驱动程序设计).avi -课程4(入式LINUX内核驱动进阶班-上) -第1天(内核开发基础) -内核驱动进阶班-1-1(Linux内核简介).avi -内核驱动进阶班-1-2(Linux内核源代码).avi -内核驱动进阶班-1-3(Linux内核配置与编译).avi -内核驱动进阶班-1-4(Linux内核模块开发).avi -内核驱动进阶班-1-5(必修实验).avi -第2天(U-Boot移植) -内核驱动进阶班-2-1(入式linux系统架构).avi -内核驱动进阶班-2-2(交叉工具链).avi -内核驱动进阶班-2-3(Bootloader介绍).avi -内核驱动进阶班-2-4(U-Boot介绍).avi -内核驱动进阶班-2-5(U-Boot命令).avi -内核驱动进阶班-2-6(U-Boot启动流程).avi -内核驱动进阶班-2-7(Uboot移植).avi -内核驱动进阶班-2-8(必修实验).avi 视频4.iso -课程4(入式LINUX内核驱动进阶班-下) -第3天(内核开发基础) -内核驱动进阶班-3-1(入式linux内核制作).avi -内核驱动进阶班-3-2(根文件系统制作).avi -内核驱动进阶班-3-3(内核启动流程).avi -内核驱动进阶班-3-4(入式文件系统).avi -内核驱动进阶班-3-5(必修实验).avi -第4天(内存管理子系统) -内核驱动进阶班-4-1(Linux内存管理).avi -内核驱动进阶班-4-2(进程地址空间).avi -内核驱动进阶班-4-3(内核地址空间).avi -内核驱动进阶班-4-4(Linux内核链表).avi -内核驱动进阶班-4-5(Linux内核定时器).avi -内核驱动进阶班-2-7(Uboot移植).avi -内核驱动进阶班-2-8(必修实验).avi -第5天(进程管理子系统) -内核驱动进阶班-5-1(LINUX进程控制).avi -内核驱动进阶班-5-2(LINUX进程调度).avi -内核驱动进阶班-5-3(Linux系统调用).avi -内核驱动进阶班-5-4(Proc文件系统).avi -内核驱动进阶班-5-5(内核异常分析).avi -内核驱动进阶班-5-6(必修实验).avi -第6天(简单字符设备驱动程序设计) -内核驱动进阶班-6-1(LINUX驱动程序介绍).avi -内核驱动进阶班-6-2(字符设备驱动程序设计).avi -内核驱动进阶班-6-3(字符设备驱动程序实例分析).avi -内核驱动进阶班-6-4(竞争与互斥).avi -内核驱动进阶班-6-5(必修实验).avi -第7天(高级字符设备驱动程序设计) -内核驱动进阶班-7-1(Ioctl设备控制).avi -内核驱动进阶班-7-2(内核等待队列).avi -内核驱动进阶班-7-3(阻塞型字符设备驱动).avi -内核驱动进阶班-7-4(Poll设备方法).avi -内核驱动进阶班-7-5(自动创建设备文件).avi -内核驱动进阶班-7-6(必修实验).avi

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值