杂项知识点1

张开发
2026/4/10 7:05:40 15 分钟阅读

分享文章

杂项知识点1
内核态和用户态之间如何进行切换linux启动流程上电后会根据设置启动bootloader设置好之后会从flash上读取内核内核启动会初始化异常向量作内存管理文件系统初始化调度器初始化驱动程序加载等操作。执行完成后会运行第一个应用程序。对于arm架构存在几种模式svc内核态、最高权限usr用户态最低权限irq中断模式swi软中断cpu中有个状态寄存器CPSRcurrent program status reg,该寄存器中的一些位可以用来设置cpu处于哪个模式。当执行到第一个应用程序之后会变为usr模式。svc模式下直接写cpsr寄存器可以进入usr模式在usr模式下通过异常执行swi指令会进入svc模式chrdevs数组如何和对应的驱动文件字符设备节点绑定在字符设备驱动开发的过程中以hello_drv为例1、首先编写了hello_drv.c文件通过makefile编译为hello_drv.ko文件通过insmod加载当执行到hello_drv.ko驱动的入口时执行register_dev函数时会向内核中的chrdevs结构体中添加一项。假设该项为第100项即主设备号为1002、mknod /dev/xxx c 100 0 创建字符设备节点此时只是创建了这样一个文件并没有和对应的驱动文件绑定3、当执行open(“/dev/xxx”)时会进入swi中断该中断会进入内核态调用sys_open函数会解析/dev/xxx文件得到该文件的属性文件类型例如字符设备文件主设备号自设备号等。然后会和chrdevs数组绑定。register_chrdev函数的作用只是在chrdevs数组中注册了一项可以在/proc/devices/文件夹下查看class_create函数和device_create函数的作用是生成/sys/下的对应文件Kconfig:提供界面内容比如在Kconfig中定义那么在menuconfig中就可以得到.config 保存配置值编译状态编译进内核或者编译为ko文件比如将该项设置为M在.config中该项被设置为MMakefile使用.config中的配置值linux中的进程线程和FreeRTOS中的任务之间的关系

更多文章