浅析 linux - 概述

2023-05-16

概述

Linux,全称GNU/Linux,是一套免费使用和自由传播的类Unix操作系统。因为其开源和免费的原因,使其吸引了大量的程序员群体。

核心

linux的核心思想:一切皆文件。

linux将目录、文件、设备驱动等均抽象成文件形式,并通过VFS(Virtual File System 虚拟文件系统)为各类文件系统提供了统一接口。

空间

linux包含用户空间和内核空间,用户空间运行用户编写的应用程序,而内核空间则运行设备驱动、操作系统。

用户空间和内核空间的主要区别:

1、运行的软件不同:用户空间包含的软件就是各种应用程序(ls/cd/...),各种库文件;而内核空间包含的软件就是uImage。

2、CPU核工作模式不同:用户空间的软件在运行的时候,对应的CPU核的工作模式为user用户模式;而内核空间软件在运行时,则是SVC管理模式,内核空间的软件权限最高。

3、非法访问内存:用户空间的软件如果对内存进行非法访问,进程将会被系统干掉(例如:段错误);而内核空间则直接导致系统崩溃。

注意事项:

1、‍‍‍‍ 用户空间的软件是不允许直接访问内核空间的代码地址和数据,要想访问内核空间必须只能通过系统调用。

2、不论是内核空间还是用户空间的软件均不允许直接访问外设的物理地址,要想访问外设的物理地址必须将物理地址映射到用户空间的虚拟地址上(简称用户虚拟地址),将来访问映射的用户虚拟地址就是在访问物理地址。

3、 用户空间软件类似网络编程的客户端,它总是向linux内核空间的软件发起一个服务的请求,然后linux内核空间根据请求完成需求,并且将最终的结果返回给用户空间的软件,而linux内核空间软件类似网络编程的服务器端,它们的职责永远的服务用户空间的软件。

程序

★应用程序示例如下

#include <stdio.h>

int main(int argc, char *argv[])
{
     printf("hello,world\n");      
     exit(0);
}

1、应用程序包含的头文件位于标准C库对应的头文件目录中: include;usr/include/等

2、程序的入口函数是main,出口函数是exit

3、应用程序打印输出使用printf函数。

4、main函数参数,argc参数的个数,argv参数的信息

★内核程序示例:

#include <linux/init.h>
#include <linux/module.h>  
static int test_init(void)
{
    printk("hello feng\n");
    return 0;
}  
static void test_exit(void)
{
    printk("bye bye feng");
}

/* 内核程序的入口函数用module_init宏来修饰,形参列表为void  
入口函数的返回值数据类型必须是int类型,成功返回0,失败:负值  */
module_init(test_init);

/* 内核出口参数为用module_exit修饰,返回值和形参均为void */ 
module_exit(test_exit);

MODULE_LICENSE("GPL");

1、内核程序使用的头文件均位于linux内核源码中(如:/opt/kernel)。

2、内核程序的入口函数用module_init宏来修饰,出口函数用module_exit修饰。

3、内核程序可以通过执行insmod安装到内核uImage中,此时通过rmmod从内核uImage中卸载。也可采用与内核编译在一起的方式(选择*)。内核启动装载内核程序,系统重启卸载内核程序。

4、内核程序基本上都应添加宏MODULE_LICENSE("GPL");否则内核有些函数和变量无权访问!

5、内核打印输出使用printk函数。‍‍‍‍‍‍‍‍‍‍‍

往期 · 推荐

帮你自动化办公的python-自动提取pdf指定页(文件处理篇)

帮你自动化办公的python-自动提取pdf指定页(项目概述)

也没想象中那么神秘的数据结构-一种通用化的双向链表设计(底层源码)

也没想象中那么神秘的数据结构-一环扣一环的“链表”(双向链表)

我用C语言玩对象,偷偷关注着你的观察者模式(基类设计)

关注

更多精彩内容,请关注微信公众号:不只会拍照的程序猿,本人致力分享linux、设计模式、C语言、嵌入式、编程相关知识,也会抽空分享些摄影相关内容,同样也分享大量摄影、编程相关视频和源码,另外你若想要本文章源码请关注公众号:不只会拍照的程序猿,后台回复:linux驱动源码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浅析 linux - 概述 的相关文章

随机推荐