source insight

HarmonyOS单模块编译与源码导读

冷暖自知 提交于 2021-02-06 08:24:30
我这里以3518的开发板为例进行讲解,3516的也是通用的。 下面是之前全量编译的脚本 python build.py ipcamera_hi3518ev300 -b debug HarmonyOS最初只能支持全量编译的方式,这种方式最大的弊端就是我们在系统源码上开发一个用户态程序,每次都需要全量编译好系统之后进行镜像的烧录,每次编译加烧录少说需要15分钟时间,对于我们开发测试及其消耗时间,试想下每次就是想加入一行log调试下这么费劲会多么麻烦。 还好,后面随着HarmonyOS的源码更新,开始支持用户态程序的单模块编译了,编译的脚本如下: python build.py ipcamera_hi3518ev300 -T //applications/sample/camera/app:camera_app 这里以单独编译HarmonyOS自带的HelloWorld项目为例,这个-T参数非常重要,它就是代表单模块编译的,//applications/sample/camera/app只的要编译的模块的绝对路径,camera_app为要编译的模块名称。 这里先结合HarmonyOS源码讲下-T参数的由来,如果各位是通过下载压缩包的方式下载的官方的code1.0的源码压缩包解压的话,肯定是不支持该参数的,也就是说不支持单模块编译。下面来看下该参数是在什么时候更新到源码库的吧

外企是如何在家办公的?

孤街醉人 提交于 2021-01-16 04:01:08
同学们2021年好,这是今年更新的第一篇文章,本来想一月一号就发一篇,但是一个是不知道写点什么,一个确实是有点忙 加我微信【coderAllen】的同学可能知道我已经在家办公很久了,因为始于去年的疫情缘故,2020年就断断续续的在家办公,虽然是在家办公听起来比较美好,但是从实际经验出发,在家办公其实是更累的,也更需要自控力 这个问题其实也是在朋友圈下大家的留言,有不少都是羡慕等,既然如此,那就说说在家办公的好与坏吧 首先说下我在家办公需要的配套装备 笔记本电脑一台 手机一部 办公桌及办公椅一套 需要的软件主要是 Skype: 主要的交流及开会工具 Teams:主要的项目计划及文档更新工具 Outlook:主要的收发邮件工具,可以说是最重要的软件了 SourceInsight: 看代码修改代码工具 Gerrit:团队审核及代码提交工具 基本就是我每天工作需要的全部工具,从这些工具就可以看出来,其实公司已经开始在推进在家办公流程,使用的基本全是支持多人协作办公的软件,比如微软全家桶系列和Gerrit流程 如果有同学公司想推进在家办公流程的也可以按照这样的软件配备 OK,介绍了使用了的软件开始进入正题,为什么开头我说在家办公反倒更累了,首先由于不用上下班的路程,确实节约了不少时间,在北京这种拥堵的大城市,每天的通行时间确实浪费了大把好时光,所以这部分挤出来的时间我一般会用来看书

【原创】(五)Linux进程调度-CFS调度器

只愿长相守 提交于 2021-01-13 03:04:04
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本:4.14 ARM64处理器,Contex-A53,双核 使用工具:Source Insight 3.5, Visio 1. 概述 Completely Fair Scheduler ,完全公平调度器,用于Linux系统中普通进程的调度。 CFS 采用了红黑树算法来管理所有的调度实体 sched_entity ,算法效率为 O(log(n)) 。 CFS 跟踪调度实体 sched_entity 的虚拟运行时间 vruntime ,平等对待运行队列中的调度实体 sched_entity ,将执行时间少的调度实体 sched_entity 排列到红黑树的左边。 调度实体 sched_entity 通过 enqueue_entity() 和 dequeue_entity() 来进行红黑树的出队入队。 老规矩,先上张图片来直观了解一下原理: 每个 sched_latency 周期内,根据各个任务的权重值,可以计算出运行时间 runtime ; 运行时间 runtime 可以转换成虚拟运行时间 vruntime ; 根据虚拟运行时间的大小,插入到CFS红黑树中,虚拟运行时间少的调度实体放置到左边;

Lora开发

亡梦爱人 提交于 2020-12-18 04:32:37
NB-IOT和GPRS模块有什么异同 安装STM32CubeMX简介 HAL库与STD库 安装STM32CubeMX软件 MO工程建立 第四步是验证代码: 1、怎么进行IO配置 (1)看懂原理图 建立IO功能映射表 通过STM32Cubemx配置 时钟配置 lora的驱动源码分析 Source Insigh安装及使用 Source Insight是一个面向项目开发的程序编辑器和代码浏览器,它拥有内置的对C/C++, C#和Java等程序的分析。 能分析源代码并在工作的同时动态维护它自己的符号数据库,并自动显示有用的上下文信息。 来源: oschina 链接: https://my.oschina.net/u/4396273/blog/3621964

【原创】(十)Linux内存管理

雨燕双飞 提交于 2020-12-06 02:28:11
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本:4.14 ARM64处理器,Contex-A53,双核 使用工具:Source Insight 3.5, Visio 1. 概述 本文将讨论 memory reclaim 内存回收这个话题。 在内存分配出现不足时,可以通过唤醒 kswapd 内核线程来异步回收,或者通过 direct reclaim 直接回收来处理。在针对不同的物理页会采取相应的回收策略,而页回收算法采用 LRU(Least Recently Used) 来选择物理页。 直奔主题吧。 2. LRU和pagevec 2.1 数据结构 简单来说,每个 Node 节点会维护一个 lrvvec 结构,该结构用于存放5种不同类型的 LRU链表 ,在内存进行回收时,在 LRU链表 中检索最少使用的页面进行处理。 为了提高性能,每个CPU有5个 struct pagevecs 结构,存储一定数量的页面(14),最终一次性把这些页面加入到 LRU链表 中。 上述的描述不太直观,先看代码,后看图,一目了然! typedef struct pglist_data { ... /* Fields commonly accessed by

【原创】(六)Linux内存管理

ⅰ亾dé卋堺 提交于 2020-12-04 23:50:40
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本:4.14 ARM64处理器,Contex-A53,双核 使用工具:Source Insight 3.5, Visio 1. 介绍 之前的系列内存管理文章基本上描述的是物理页面的初始化过程,以及虚拟页面到物理页面的映射建立过程,从这篇文章开始,真正要涉及到页面的分配了。接下来的文章会围绕着 分区页框分配器(zoned page frame allocator) 来展开,其中会包含大家熟知的 Buddy System 分析。 本文会先围绕着涉及到的数据结构,以及大体的流程做一个整体的分析,后续会针对这个流程中的细节进行更详细的拆解,我已经迫不及待了。 2. 数据结构 2.1 概述 先回顾一下 (五)Linux内存管理zone_sizes_init 的数据结构图: 上述的结构体,描述的是下面这张图: Node ---> ZONE ---> Page 的组织关系,其中 Buddy System 中,页面都是以2的次幂来组织成链表,比如 free_area[0] ,对应的是 1个page 链表,其中又根据不同的 MIGRATE_xxxx 类型来组织,如下图: ARM64 中 MAX_ORDER

嵌入式Linux驱动开发4412-实验01内核开发基础

放肆的年华 提交于 2020-12-01 12:44:15
实验 01 内核开发基础-基于迅为4412开发板 1.1 本章导读 本实验将带您学习一遍 Linux 的框架和源码目录结构。 从任何地方拿到的 Linux 源码,都有几百 M 大小,包含上万个文件。 这么多的文件!那么问题来了,应该从什么地方入手呢? 哪些内容应该“深入研究”? 哪些内容应该“惊鸿一瞥”? 哪些内容应该“束之高阁”? 本期实验“内核开发基础”,带大家快速梳理一遍,把和学习无关的内容剔除掉。 1.1.1 工具 1.1.1.1 硬件工具 PC 机一台 1.1.1.2 软件工具 软件 Source Insight Linux 源码“iTop4412_Kernel_3.0_xxx”(在光盘目录“/ Android 源码”文件夹下,xxx表示日期) 1.1.2 预备课程 视频教程“01-烧写、编译以及基础知识视频”→“实验 12-使用 Source Insight 加载和阅读内核源码” 使用手册“3.5 Source Insight 的安装和使用” 1.1.3 视频资源 本节配套视频为“视频 01_内核开发基础” 1.2 学习目标 本章需要学习以下内容: 理解 Linux 体系结构 了解 Linux 内核结构 了解 Linux 内核源码目录结构 了解学习 Linux 的大方向→驱动 1.3 Linux 体系结构 如下图所示,Linux 体系结构,从大的方面可以分为用户空间

【原创】(十四)Linux内存管理之page fault处理

只谈情不闲聊 提交于 2020-10-28 04:31:49
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本:4.14 ARM64处理器,Contex-A53,双核 使用工具:Source Insight 3.5, Visio 1. 概述 上篇文章分析到 malloc/mmap 函数中,内核实现只是在进程的地址空间建立好了 vma 区域,并没有实际的虚拟地址到物理地址的映射操作。这部分就是在 Page Fault 异常错误处理中实现的。 Linux内核中的 Page Fault 异常处理很复杂,涉及的细节也很多, malloc/mmap 的物理内存映射只是它的一个子集功能,下图大概涵盖了出现 Page Fault 的情况: 下边就开始来啃啃硬骨头吧。 2. Arm64处理 Page Fault 的异常处理,依赖于体系结构,因此有必要来介绍一下 Arm64 的处理。 代码主要参考: arch/arm64/kernel/entry.S 。 Arm64在取指令或者访问数据时,需要把虚拟地址转换成物理地址,这个过程需要进行几种检查,在不满足的情况下都能造成异常: 地址的合法性,比如以39有效位地址为例,内核地址的高25位为全1,用户进程地址的高25位为全0; 地址的权限检查

【原创】(三)Linux进程调度器-进程切换

旧巷老猫 提交于 2020-10-21 17:34:12
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本:4.14 ARM64处理器,Contex-A53,双核 使用工具:Source Insight 3.5, Visio 1. 概述 进程切换:内核将CPU上正在运行的进程挂起,选择下一个进程来运行。 ARM架构中,CPU上一次只能运行一个任务,内核需要为任务分配运行时间来进行调度,以便同时能处理多个任务请求。 如下图所示: 当进行任务切换的时候,思考下两个问题: 怎样通过抢占来实现进程的切换? 当进程切换的时候,到底切换的什么,是怎么实现的? 这两个问题,也是本文探讨的主题了。 2. 抢占 2.1 用户抢占 2.1.1 抢占触发点 可以触发抢占的情况很多,比如进程的时间片耗尽、进程等待在某些资源上被唤醒时、进程优先级改变等。Linux内核是通过设置 TIF_NEED_RESCHED 标志来对进程进行标记的,设置该位则表明需要进行调度切换,而实际的切换将在抢占执行点来完成。 不看代码来讲结论,那都是耍流氓。先看一下两个关键结构体: struct task_struct 和 struct thread_info 。我们在前边的文章中也讲过 struct task_struct 用于描述任务

还在羡慕别人高薪?这样读源码,想不升薪都难!

人盡茶涼 提交于 2020-10-02 20:42:49
程序员在工作过程中,会遇到很多需要阅读源码的场景,比如技术预研、选择技术框架、接手以前的项目、review他人的代码、维护老产品等等。可以说,阅读源代码是程序员的基本功,这项基本功是否扎实,会在很大程度上影响一个程序员在技术上的成长速度。 2014年的时候《Qt on Android核心编程》和《Qt Quick核心编程》时作者在编写时,很多内容都是通过分析Qt源码搞明白的。这阵子研究CEF和PPAPI,也主要靠研究源代码来搞明白用法。最近工作上要修改已有项目的一个子系统,也是得硬着头皮先读懂代码。 总之在开发工作这十来年中,读过太多源码了,从源代码中学习到太多东西了,如果不阅读源代码,真不知道自己能否成长起来。 写代码是从模仿开始的,提高也是从观摩别人的优秀设计和代码开始的。所以阅读源码至关重要,接下来咱从下列方面聊聊阅读源码的事儿。 目的 工具 知识准备 运行与开发环境 笔记 实用技巧 心理调试(散步在各个环节) 目的 当我们阅读面前的源码时,无非有以下几种目的: 纯粹学习 添加新功能 重构旧代码 修复他人的Bug 不同的目的会有不同的心情,会影响到工作的进展,像修复他人的Bug这种事情,类似于没被掰弯的男猿捏着鼻子给另外一个男人擦屁股,是很恶心的,很容易让人拒绝的。所以因这种目标而阅读源码,往往是欲拒还迎、欲说还休,效率较低。然而修复实际工作中帮别人修复Bug这种情形