Sourcelink

写过单片机,焊过BGA,睡过实验室,炸过小电容

详解Linux内核之syscall

一. 概述 内核版本: linux4.1.15 宿主机: imx6ul 主机: ubuntu16.04 在Linux中,用户空间是不能直接访问内核空间,系统调用是用户空间访问内核的唯一方式, 一般情况下,在应用层调用的open(), read()等函数就是一个系统调用; 当我们需要打开一个设备的时候, 通常会使用open(/dev/xxx)方式进行,通过这样一个系统调用就可...

Linux内核之中断下半部

一. 概述 在处理当前中断时,即使发生了其他中断,其他中断也不会得到处理,所以中断的处理要越快越好。 但是某些中断要做的事情稍微耗时,这时可以把中断拆分为上半部、下半部。 在上半部处理紧急的事情,在上半部的处理过程中,中断是被禁止的; 在下半部处理耗时的事情,在下半部的处理过程中,中断是使能的; 以按键中断为例, 使用requst_irq()注册一个硬件中断服务(中断上半部...

Linux内核之异步通知

一. 概述 异步通知机制:一旦设备就绪,则主动通知应用程序,这样应用程序根本就不需要查询设备状态,是一种“信号驱动的异步I/O”。 二. 应用层 #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <s...

Linux内核之poll机制

一. 概述 我们在应用层经常会用poll()去”轮询”文件描述符(Linux下一切皆文件); 相对于使用read()一遍遍的去读(这样才是真的轮询), 效率会高的多; 现在结合驱动来分析下poll机制的实现; 内核版本: linux4.1.15 主机: imx6ul 二. 应用层 应用层调用poll的代码片段大致如下: struct pollfd fds[1]; fds[...

Linux内核之休眠与唤醒

一. 概述 在驱动中有当等待某件事件发生时可以使当前进程以休眠的方式进行等待,这样不会占用cpu资源; 当事件发生的时候则将其唤醒; 内核版本: linux4.1.15 主机: imx6ul 二. 等待唤醒API详解 2.1 等待方式 #define wait_event_interruptible(wq, condition) \ ({ \ int...

rEFInd引导linux+mac双系统

一. 概述 因为前段时间系统滚挂了以后, 重装了manjaro, 并且装了一个黑苹果,因为是先安装的manjaro, 后安装的黑苹果。 一般情况下manjaro会扫描后面安装的系统引导,并显示在启动菜单中;但是这次并没有, 而且我是一个硬盘一个系统。y 试了很多种办法都没有在一个引导界面, 引导两个系统, 最后还是通过rEFInd完成了双系统引导; 二. 安装rEFInd 1.安...

详解Linux内核kobject模型

一. 概述 在看linux的设备模型发现kobject在很多地方都有使用, 经过分析发现它非常经典的实现了面向对象; 接下来分别先解释下kobject等结构体的概念; 1.1 kobject kobject是一个结构体, 它的结构体声明如下: struct kobject { const char *name; // 设备的名称 struct list_h...

linux内核之initcall机制

一. 概述 引入问题: initcall机制是做什么的?它有哪些功能? 回顾昨天的 machie_desc, 其中init_machine是在哪被调用的? 查看发现是在如下函数被调用: static int __init customize_machine(void) { /* * customizes platform devices, or adds new ones ...

linux内核之machine_desc获取

一. 概述 板子: imx6ul 内核版本:linux4.1.15 宿主机:ubuntu16.04 machine_desc主要是对板子的一个特性,比如init_machine()和init_irq(), 这些都是它所具有的功能,不同厂家的板子这些初始化是不同的; 二. machine_desc的构造 DT_MACHINE_START(IMX6UL, "Freescale i...

【从零开始写RTOS】st-link进行gdb调试

一. 建立监听 st-util -p 4500 -p是为指定监听端口 二. 启动gdb arm-none-eabi-gdb bin/demo_proc_manager.elf 三. 建立目标 target extended-remote :4500 四. 再次更新板载程序 load 程序来源bin/demo_proc_manager.elf 示意图: 五. 命...