Sourcelink

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

rEFInd引导linux+mac双系统

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

详解Linux内核之自旋位锁

一. 概述 自旋位锁与自旋锁有类似的地方:均是多个CPU竞争同一把锁,如果不成功,就通过自旋的方式,轮询锁状态直到成功获得锁为止。 但在一个自旋锁中,使用32位的字段表示锁的状态。而在自旋位锁中,每一个unsigned long类型的字段中,表示32/64个位锁。其中每一位表示一个锁的状态。 二. 内核代码详解 include/linux/bit_spinlock.h 2.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 示意图: 五. 命...

【从零开始写RTOS】进程退出处理

一. 原因 根据上节调试结果,我们知道进程在退出以后产生了异常, 原因是返回后进程跳转到了异常的地方; 上节分析的记录: 二. 对策 所以我们现在需要来解决该问题,我们为所有的进程退出做一个统一的处理, 需要做到如下几点: 清楚进程存储表 将进程从就绪表中移除 ...

【从零开始写RTOS】系统启动第一个进程

一. 准备工作 1.1 初始化 void kos_sys_init(void) { /* 1. 初始化就绪队列 */ kos_rq_init(); /* 2.初始化启动标志 */ kos_running = 0; /* 3. 空闲进程的创建 */ _idle_proc_create(); } 1.2 空闲进程实现 void *kos_...

【从零开始写RTOS】进程调度

一. 调度原理 实质是触发一个上下文切换 port_os_ctxsw: push {r4, r5} ldr r4, =NVIC_INT_CTRL ldr r5, =NVIC_PENDSVSET str r5, [r4] pop {r4, r5} bx lr 会引发一个服务函数PendSV_Handler,...

【从零开始写RTOS】进程创建

一. 需求 1.进程堆栈指针 进程优先级 进程的操作链表 进程状态 进程名 休眠链表 进程休眠时间 进程ID 二. 进程结构体 struct kos_proc { unsigned int *stack_pointer; struct list_head slot_list; ...