自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

本末实验室

先了解在模仿,先熟练后创新(线上笔记,非博客!!!)

原创 每周阅读文章归档

目的: 收录一些阅读过的文章2020-6-4-121、Android系统理解 Android Build 系统Repo介绍Logcat - 阅读错误报告Android源码的版本与分支详解2、Linux系统Linux安装多个jdk版本进行切换3、了解技术Linux 内核实验室2020-3-271、管理源码github readme文件写作规范Githu...

2020-04-12 11:37:25 67

原创 2020-6-29(毕业季)

今年注定是不同寻常的一年,全球病毒爆发,还有我们毕业了。疫情阻挡我返回学校,却没能留住时间。我的学生时代结束了,准备开启另一个人生阶段–职业生涯。回想大学四年,做出一些自以为有意义的决定,同时荒废很多时间,也留下了很多很多遗憾。在走进社会之前,最后以学生的身份,给这段大学四年的生涯画上一个句号。现状与愿景由于疫情,学生只能分批返校(打包行李和领取证书),没有任何毕业仪式,我托同学帮忙邮寄东西,当然少了一个最后和同学相聚的机会。希望能相约在未来的某一天吧~为了能在正式入职前准备好一切,只身一.

2020-06-29 20:04:04 1893 2

原创 【学习笔记10】进程数据结构内核函数栈

介绍&目的1、 介绍在程序执行过程中,一旦调用到系统调用,就需要进入内核继续执行。无论是进程还是线程,对应到内核里面,我们统一都叫任务(Task),由一个统一的结构 task_struct 进行管理。其中,内核栈是和进程运行有关系的。相关的成员变量有struct thread_info thread_info;void *stack;嗯,先上图2、 目的以下整理...

2020-04-16 07:27:27 145

原创 【学习笔记09】进程数据结构task_struct

基本概念在Linux里面,无论是进程,还是线程,到了内核里面,我们统一都叫任务(Task),由一个统一的结构task_struct进行管理。分析task_struct对源码检索stask_struct关键字,发现文件include/linux/sched.h有这个结构体定义,结构非常长。下面借用专栏中总结的框图补充知识1、 系统上查看进程信息可以通过/proc/pid下的文件查看进...

2020-04-15 07:06:34 61

原创 【学习笔记08】了解与创建线程

介绍&目的之前了解了进程的创建过程,其实进程默认也有一个主线程(也可以包含其他线程)。线程是负责执行二进制指令的,它会根据项目执行计划书,一行一行执行下去。进程要比线程管的宽多了,除了执行指令之外,内存、文件系统等等都要它来管。例如,此时有一个开发网站的项目。我们想把它拆解成多个网页任务,并行执行,最后做一个整合。类似的,在程序实现上,也可以将一个功能拆分成多个子任务。可以使用多进程的...

2020-04-14 21:26:07 45

原创 【学习笔记07】进程出生过程
原力计划

目的对于进程,可以通过别人写好的程序(比如Linux命令)或者自己写的程序(编译后生成可执行文件),加载到内存后执行就视为一个进程。这些我已经了解,OK,那么在学习一下代码到二进制文件的过程是什么、系统如何识别二进制文件、如何加载到内存并运行成一个进程,另外如何从代码中创建一个新进程?这次整理笔记的主要内容,也是本次学习的目的:了解代码编译成二进制文件,生成库文件或者可执行文件的过程了...

2020-04-13 22:34:08 57

原创 【学习笔记06】深入了解系统调用

glibc 的官网:http://www.gnu.org/software/libc/下载glibc源码: git clone git://sourceware.org/git/glibc.gitlinux kernel官网: https://www.kernel.org/linux源码获取: https://cdn.kernel.org/pub/linux/kernel/v4.x/linu...

2020-04-10 21:19:38 119

原创 【学习笔记05】内核初始化

初步了解1、 回顾经过了BootLoader阶段,此时cpu从实模式转换成保护模式,有了更强的寻址能力,kernel也已经加载到内存了。系统内核开始运行在kernel源码init/main.c文件中,内核的启动从入口函数start_kernel()。其中进行一系列的初始化XXXX_init2、目的结合源码,了解内核启动阶段开始都做了哪些初始化。3、总结一些关键的初始化函数,原文中已经...

2020-04-09 23:20:32 39

原创 【学习笔记04】BIOS和BootLoader

引入之前理解了x86架构下的工作模式,计算机系统的核心是CPU、内存、总线来干活的。另外随着计算机技术的衍变,有了实模式和保护模式两种模式。系统启动需要先经过实模式然后进入保护模式。实模式,兼容原来16位系统设计出的模式。只能寻址1M,每个段最多64K保护模式,对于32位系统,能够寻址4G。BIOS阶段BIOS是固化在ROM上的一段程序,如果你自己安装过操作系统,刚启动的时候,按某...

2020-04-09 08:10:19 67

原创 07 Android系统之Android.bp条件编译

基本概念条件编译为我们提供了一种一套代码兼容多个版本的解决方案,提高代码的复用率。在Android7.0之前使用的是Makefle编译,makefile语法支持条件编译,配置到Android.mk文件。在那以后,开始使用Ninja编译框架,只需要我们配置Android.bp文件,但是bp文件就是一个配置文件,不支持条件编译。但条件编译又是强需求,所以 google 还是提供了一种条件编译的...

2020-04-08 07:49:33 377

原创 06 Android系统之添加java层系统服务

引入概念目前对android系统体系了解比较少,主要区分一下服务、系统服务这两个概念服务是一个后台运行的组件,执行长时间运行且不需要用户交互的任务。在android开发中作为一个应用组件,通过继承类来使用extern Service。Android系统服务。理解为随着andorid系统启动运行的service,分为本地守护进程、Native系统服务和Java系统服务。有相同点更有不同点...

2020-04-02 21:18:29 487 2

原创 05 Android系统之删除Android原生内置APK

两种方法为了在编译阶段将内置apk给异常,下面提供2中方法。直接找到添加这个apk的mk文件,从 PRODUCT_PACKAGES 中删除通过添加模块,LOCAL_OVERRIDES_PACKAGES定义要覆盖的apk目录结构hinzer@ubuntu:android-10$ tree ./device/mi/pure/./device/mi/pure/├── Android.m...

2020-04-02 00:18:58 343

原创 04 Android系统之添加预编译模块

理解在实际的系统开发过程中,有很多文件都是预先编译好的,比如第三方APK,so库, jar包, bin 文件,配置文件等。我们需要在系统编译时能把这些文件打包编译到系统镜像里面。操作准则我们有两种方法可以达到我们的目的: PRODUCT_COPY_FILES 和 定义 prebuilt 模块。如果这个文件只需要预置到指定目录就可以了,那我们就可以简单的将其加入 PRODUCT_COPY_...

2020-03-31 23:13:28 86

原创 【学习笔记03】系统调用

相关概念1、程序vs进程vs命令Linux系统上所有的操作由进程完成,进程的运行是动态的,在此之前是一个静态的程序。用户用一个程序来启动一个进程,这个程序可以是别人写好的(最终被编译成可执行文件),比如ls、pwd、cat,也可以是我们自己写的。2、系统调用无论如何,程序最后运行起来都是进程,并且一个程序想要在系统上跑,要用到系统调用,这是系统给用户提供的API接口。3、strace命令...

2020-03-31 21:57:28 61

原创 【学习笔记04】x86架构

先了解计算机底层最基本的工作原理,以便于以后能理解Linux系统的运作模式!!总体概要原文中对于x86架构的总结图片,重点牢记这些寄存器的作用,以及段的工作模式计算机的工作模式(了解一下)1、 CPU、总线、内存对于一个计算机来讲,所有功能看似是输入输出设备的功劳,实际干活的还是CPU。同时CPU通过内存不断的保存和取出中间数据,然后基于中间结果进行进一步的计算。总线是CPU和其...

2020-03-31 21:56:06 94

原创 编译android goldfish内核(x86_64)

Android linux内核Android并没有使用标准的Linux内核,而是做了很多的修改。AOSP网站提供了适应各种芯片或设备的linux内核源码的仓,只有少部分google设备支持的内核源码可以通过repo构建,其他的需要做一些编译配置。手动编译内核这里选择emulator模拟器跑Android内核,所以选择goldfish版本作为我的的Linux Kernel,下面通过编译gold...

2020-03-31 02:10:11 268

原创 03 Android系统之添加自定义模块

背景介绍早期的Android系统都是采用Android.mk的配置来编译源码,从Android 7.0开始引入Android.bp。很明显Android.bp的出现就是为了替换掉Android.mk。Android 7.0引入ninja和katiAndroid 8.0使用Android.bp来替换Android.mk,引入SoongAndroid 9.0强制使用Android.bp添...

2020-03-30 21:55:24 155

原创 02 Android系统之添加系统属性
原力计划

理解概念1、基本描述系统属性可以简单的理解为系统层级的全局变量,以key-value的形式保存, key-value 都是字符串。这些属性可能是有些资源的使用状态,进程的执行状态,系统的特有属性等。2、命名规则几种特殊前缀的属性ro :只读属性,不能修改。persist :修改属性后,重启依然有效。数据会保存到 /data/property 目录。其他前缀的属性被设置后,只是保存在内...

2020-03-30 21:52:37 90

原创 01 Android系统之添加Product
原力计划

理解概念1、Product在android源码正式编译之前选择Product,使用lunch product-xxx,这一步操作理解为预先对要编译的源码进行一系列的配置。在android-10的源码中,将一个Product配置分成三个部分:BoardConfig.mk: 芯片硬件相关配置,分区设置等product.mk: 一个产品的软件相关的配置,比如内置哪些软件模块,由AndroidP...

2020-03-30 00:01:38 167

原创 00 Android系统之开发环境搭建

ubuntu系统环境hinzer@ubuntu:~$ uname -aLinux ubuntu 5.3.0-42-generic #34~18.04.1-Ubuntu SMP Fri Feb 28 13:42:26 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux配置android开发环境# 编译所需的工具和相关库sudo apt-get install ...

2020-03-29 23:59:43 94

原创 android源码管理工具

Google使用git和repo管理AOSP源码。概念区分1、Git和git(https://source.android.com/setup/develop#git)Git是版本控制系统,我们使用git工具进行代码仓库和分支的管理。比如我可以使用git clone从远程仓库的一个分支下载代码到本地,可以git push将本地仓库的某一个分支推送到远程仓库的分支,关于git使用可以参考p...

2020-03-29 21:49:24 136

原创 (笔记)理解单元测试

理解概念1、单元测试的概念理解单元测试是指,对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作,这里的最小可测试单元通常是指函数或者类。一个工厂生产电视机的例子。如果把电视机的生产、测试和软件的开发、测试进行类比,你可以发现:电子元器件就像是软件中的单元,通常是函数或者类,对单个元器件的测试就像是软件测试中的单元测试;组装完成的功能电路板就像是软件中的模块,...

2020-03-28 09:07:03 74

原创 android logcat命令

理解logcat是抓log的工具,从android logging系统抓取日志。1、logcat相关目录代码位置:`/system/core/logcat/`编译生成的可执行文件位于:`out/target/product/umi/system/bin/logcat`(umi是产品名)对应到设备端的可执行文件:`/system/bin/logcat`2、日志缓冲区radio:查看包...

2020-03-28 09:03:56 54

原创 git bleame、git bisect

概念理解git blame和git bisect能帮助调试git项目,找到出bug的原因。操作方法1、文件标注使用git blame能显示任何文件中每行最后一次修改的提交记录。git blame --help查看具体描述mi@ubuntu:base$ git blame Android.bp -L 230,231 #查看Android.bp的230-231行提交记录,#commit ...

2020-03-28 09:02:43 74

原创 打patch

理解patch是某一次提交给文件内容的改变,打patch是将某一次改变的内容应用到当前的版本库。常规操作# 生成patchgit diff ./ > xxx.patch #将差异的内容制作成patchmkdir update && git diff commit-id-time1 commit-id-time2 --name-only | xargs -i cp ...

2020-03-28 09:01:49 74

原创 git fetch

理解从远程取最新的patch或者分支,引用的信息记录到.git/FETCH_HEAD这个文件中。可以借助git fetch --help查看具体描述。可以操作一个分支git pull = git getch + git merge,也可以单独pick一个patchgit fetch + git cherry-pick。使用准则无命令速查### 从gerrit上取一个patch,然后pic...

2020-03-28 09:00:36 48

原创 【学习笔记02】使用Linux命令运行程序、安装软件
原力计划

阅读刘超老师的《趣谈Linux操作系统》,然后整理了这篇笔记,文章中讲了多种常见的Linux命令。我挑2个我认为挺重要的操作,运行程序和安装软件的命令整理一下。运行程序通过命令行让Linux执行程序,有以下几种方式,也决定进程已什么方式运行。1、交互式运行$ ./filename # 交互式运行,Ctrl+C可以结束这个在执行的进程2、后台方式运行# 脱离终端后台运行,并将log...

2020-03-21 21:58:27 96

原创 git引用说明

理解git用文件保存patch的哈希值,这个文件名代表一个分支。指针、分支、引用理解是表示一个概念。1、在.git目录下查看HEAD #指向当前分支refs/heads/ #分支,记录本地commit对象refs/tags/ #tag也记录commit对象,但是通常不会改变refs/remotes/origin/ #服务器映射下来的远程只读分支2、查看HEAD内...

2020-03-21 16:48:22 42

原创 git message规范

在正式参与项目开发之前,了解并且坚持使用一些规范更方便我们与同事之间的合作。这些通常是约定俗成的。git提交准则git源码中的Documentation/SubmittingPatches列举了git提交规范相关的说明文档。提交之前的注意事项1、检查空白错误git diff --check #确认将提交的内容中有无空白信息2、尝试让每一个提交成为一个逻辑上的独立变更集尽量使每一...

2020-03-21 16:46:51 137

原创 git对象

窥探git对文件内容管理核心是基于键值对数据库,位于.git/objects。通过key-value方式管理内容。对象数据库中存储的三种对象,每一个对象在数据库中以key-value形式存在数据对象(blob object),记录文件内容,解决内容存储问题树对象(tree object),它能解决文件名保存的问题,也允许我们将多个文件组织到一起提交对象(commit object),对...

2020-03-21 16:46:01 51

原创 git stash、git clean

理解贮藏(stash)会处理工作目录的脏的状态——即跟踪文件的修改与暂存的改动——然后将未完成的修改保存到一个栈上, 而你可以在任何时候重新应用这些改动(甚至在不同的分支上)。或在清理(clean)文件。使用准则无命令速查$ git stash push # stash跟踪文件的修改与暂存的改动$ git stash push --keep-index # --keep-in...

2020-03-21 16:45:06 82

原创 git revert

理解revert还原提交,撤销已经存在的commit的所有更改,原来的commit将保留,并用新commit来记录还原后的结果。git help revert命令查看具体描述。使用准则无命令速查git revert HEAD # 撤销当前HEAD指向的patch上的更改git revert commit # 撤销制定commitid表示的patch上的更改# merge之后...

2020-03-21 16:44:23 32

原创 git reset

理解1、git三棵树,即HEAD,永远指向当前分支的最新一笔提交Index,索引(暂存区)Work Directory,工作目录#git 底层命令git cat-file -p HEAD #显示HEAD内容git ls-tree -r HEAD #显示树对象的内容git ls-files -s #显示索引(Index)的所有文件信息tree ...

2020-03-21 16:43:50 36

原创 git rebase

理解rebase也是整合不同分支的方法,和merge不同的是它会改变提交历史。git help rebase命令查看具体描述。假设当前HEAD指向topic分支,下面执行rebase命令(将topic上的patch打到master上,并改变历史),使用git rebase masterrebase前: A---B---C topic ...

2020-03-21 16:43:07 24

原创 git merge

理解工具用来合并一个或者多个分支到你已经检出的分支中。 然后它将当前分支指针移动到合并结果上。git help merge命令查看具体描述。将topic分支merge到master分支上(更新master分支),使用git merge topic合并前: A---B---C topic / ...

2020-03-21 16:42:22 31

原创 git log

理解显示项目提交历史,通过参数选项可以控制log显示的方式。git help log查看具体描述。git log 有两个高级用法:一是自定义提交的输出格式,二是过滤输出哪些提交。这两个用法合二为一,你就可以找到你项目中你需要的任何信息。使用准则git log允许你查看你项目历史中任何需要的内容。命令速查1、常规使用,查看git log常用选项git log --oneline -...

2020-03-21 16:41:40 30

原创 MI8线刷magist获取root权限

简单记录一下自己将MI8系统root的过程。刷机环境机型:MI 8系统:MIUI Global 11.0.2稳定版本开发环境:Ubuntu18.04刷机工具: adb + fastboot + Magisk Manager +线刷包刷机流程#1 通过各种方式备份重要的数据#2 首先手机数据线连接电脑,开发者选项中打开usb调试并与电脑认证#3 下载手机当前系统对应的线刷包,找到i...

2020-03-02 20:59:46 446

原创 【学习笔记01】趣谈linux操作系统之系统综述

哪有什么岁月静好,只不过有人替你负重前行。而操作系统就扮演了这样一个负重前行的角色硬件组成对于一台电脑,拆开来看,有鼠标键盘、显卡显示屏、CPU、内存、硬盘、网卡…但仅有硬件组成的电脑,还不能直接使用。"硬件 + 操作系统"才算是我们通常说的电脑,以后的学习主要围绕linux系统,这个话题展开。我们首先必须承认操作系统的重要性。想理解外包公司一样理解操作系统刘超老师将操作系统类比成...

2020-03-01 08:49:58 255

原创 2019年度个人总结

2019年又要到底了,有必要写一个总结,看看过去的一年时间了干了些什么。。另,不知怎么,发现最近变得有些懒散,希望能重拾写作这个习惯。不管怎样,这不是一篇对自我批判或者激励自我的文章,总结记录,仅此而已。今年跨年在看罗胖演讲时间的朋友,最多听到的是网络、连接、点亮这些字眼,无论是个人、行业、国家,都在积极地对外输出自己的价值(连接),塑造自己的品牌影响力(网络)。今后是网络化的时代。对于我而言...

2020-01-01 00:36:01 1294 4

原创 2019-11-25

难得静得下心来,写点东西。就随便写写

2019-11-25 22:52:28 131 8

提示
确定要删除当前文章?
取消 删除