如何开始编码 (一)

本文主要是从应用的角度出发,分别阐述操作系统接口,计算机语言,文件系统等背后的一些知识,规范,原理,设计思想,应用法门,让初学者对编码有一个整体的,全局的认识,有一个物理的视角,找到自己的起点。   Table of Contents 前言 操作系统接口 ABI (application binary interface) 系统调用(system call) sysfs 文件系统接口   前言 写这篇文章主要是基于自己大学的经历,当时抱着一腔热血去学计算机编程,可是当把c/c++语言,数据结构,操作系统,
1133 次浏览
发表于 2019-04-19 10:21:09

如何开始编码 (二)

本文主要是从应用的角度出发,分别阐述操作系统接口,计算机语言,文件系统等背后的一些知识,规范,原理,设计思想,应用法门,让初学者对编码有一个整体的,全局的认识,有一个物理的视角,找到自己的起点。 计算机语言与编译器 计算机语言就是一套人机交互的协议,好比我们学了英语,就可以同“支持”英语的人交流,来达到我们的一些目的。计算机语言的本质也是一样的,程序员通过某语言来调配它的资源,完成目标任务。无论是什么语言,语法方面都大同小异,无非就是变量定义,表达式加几个循环而已--它的理论源头就是大名鼎鼎的图灵完备的编
659 次浏览
发表于 2019-04-19 11:17:47

如何开始编码 (三)

本文主要是从应用的角度出发,分别阐述操作系统接口,计算机语言,文件系统等背后的一些知识,规范,原理,设计思想,应用法门,让初学者对编码有一个整体的,全局的认识,有一个物理的视角,找到自己的起点。 文件系统 文件系统就是用来对文件进行增删改查的控制系统,不同类型的文件系统对应着不同的管理策略,但是,无论何种策略都需要解决两个最基本的问题: 文件存储。 目录访问。 因此文件系统需要在磁盘记录一些额外的信息,所以格式化以后,磁盘容量会小于实际的容量。格式化的过程就是在磁盘上“安装”文件系统的过程,下面以EXT2
236 次浏览
发表于 2019-04-19 12:02:24

如何开始编码 (四)

本文主要是从应用的角度出发,分别阐述操作系统接口,计算机语言,文件系统等背后的一些知识,规范,原理,设计思想,应用法门,让初学者对编码有一个整体的,全局的认识,有一个物理的视角,找到自己的起点。 文件系统 FAT FAT是Windows下的一款经典文件系统,当时Windows系统下一定要做两件事情是:碎片整理和杀毒,而这些都同FAT文件系统有关。下面先了解下FAT系统的基本内容,下图是FAT的“物理视图”。      BPB (启动引导区域)-- 相当于FAT文件系统的“头部”,定以了FAT文件系统的“元
454 次浏览
发表于 2019-04-19 12:27:44

Android 内存管理

这篇文章主要是解释 Android 是如何管理 app 进程和内存,低内存配置,和一些debug 手段, 本文的 android 版本是 4.4.   Table of Contents 堆与栈 Java 虚拟机(JVM) 堆的增长 Android 如何管理内存 共享内存和私有内存 APP 内存限制及配置 Low Ram Configuration 启动 Low Ram Device 标志 停用 JIT 内核配置     微调内核 ActivityManager 以减少直接回收     微调 LowMem
632 次浏览
发表于 2018-04-24 17:38:31

Android Low Memory Killer 机制

LowMemoryKiller是Android 系统在Linux kernel的OOMKiller基础上打的一个补丁。OOMKiller在kernel 没法再分配内存的时候,寻找一个得分最高的进程来杀掉。LowMemoryKiller则提前一步,通过把剩余内存划分成不同的级别,内存在消耗的过程中,触发不同的级别,杀死相应的app进程。在触发OOMKiller前,大量缓存的app进程已经被杀死掉了。 先简单说一下OOMKiller。 我们查看任一进程的proc信息(如:/proc/1), 都会看到以下三个参
213 次浏览
发表于 2018-05-28 16:53:22

Android 输入设备子系统架构

 Android TV开发过程中,主要的输入设备是摇控器(IR),键盘(keypad),以及一些USB的HID输入设备,本文主要讲讲这块的工作流程,使用的是AN5版本。   流程 首先,Linux kernel 驱动层得到硬件设备按键的原始扫描码,触摸,移动等各种事件信息,按键码会被转化为Linux 标准的KEY (uapi/linux/input.h)。最终,kernel会把设备的事件转换成一个标准的Linux Input Event (linux/input.h) ,抛给上面的系统。   接下来, A
232 次浏览
发表于 2018-04-19 19:08:34

调试Android TV方案开机启动慢

客户使用的是Android作为TV系统,加载客户的系统后,发现开机启动要近80s,而Android公版软件只需要40s左右,当时进行了如下调试: 1: 开机后使用 logcat -v time 来抓取日志,查看是否有某些进程卡顿。 分析日志,发现时间都比较连贯,没有明显的阻塞,或者耗时长的操作,特别查看了surfaceflinger 进程,它的时间顺序也没有问题。   2:  开机过程中使用 查看 CPU和内存的消耗。 内存消耗合理,且日志里面,也没有出现过多的虚拟机释放内存的信息。 cpu消耗较公版略高
496 次浏览
发表于 2018-05-09 17:31:14

Android TV 方案开关机测试中,出现黑屏

现象就是,客户在开关机测试过程中,有一定的概率出现黑屏, 大约1分钟左右,黑屏后,系统能恢复,自动再进入Launcher,工作正常。   反复查看日志后,发现了一条线索。 **** 正常 01-01 08:00:04.979 D/SurfaceFlinger( 1092): captureScreen: supportWidth = 3840, supportHeight = 2160, maxLayerZ = -1 01-01 08:00:05.489 D/SurfaceFlin
295 次浏览
发表于 2018-05-09 17:37:26

如何创建一个Android编译工程

创建编译工程,这个说法可能不太准确,简单地说就是如何在device下面添加一个新的产品。 添加一个新产品 Android 采用的是 brand/device/product 这样一个三级的层次结构,编译系统根据相应的规则来搜索,加载编译项目。所以,建立新的工程,最重要的就是先定义好 'brand', 'device' 和'product'。 下面让我们来为华为的meta7_32G来创建一个产品配置吧: brand = 'huawei' device = 'meta7' product = "met
235 次浏览
发表于 2018-06-06 10:42:31

Android Vold 架构简析

 这篇文章中主要是分析一下,android 系统里面的 Vold—— Vold 是andorid 系统的设备管理器,扮演着linux里面的udev的角色。 它通过监听uevent的端口,取得uevent事件,dispatch 到 相应的 Listener,执行相应的动作。     UEvent 在linux平台上,uevent 给系统软件提供设备事件,设备节点的权限管理等等,它由kernel发出。通过socket与 udev 守护进程通讯 (systemd-udevd.service), 在 sysfs
526 次浏览
发表于 2018-04-26 14:37:28

Git基础使用手册

Table of Contents 1. 简介 2.基础命令 2.1. 仓库初始化 2.2. 查看仓库状态     2.2.1. git status     2.2.2. git log     2.2.2. git show     2.2.3. git diff     2.2.4 git ls-files 2.3. 提交改变到仓库 2.4. 使用branch 更有效地工作    2.4.1.merge    2.4.2.Rebase    2.4.3. 直接 rebase 服务器上的分支    2
463 次浏览
发表于 2018-04-26 10:11:49

Android 属性

属性是Android系统的一大特色,它用来进行系统配置,模块,组件间的通讯。这篇文章主要是聊一下Android property的应用和工作原理以及一些常用的系统属性。 属性配置文件 在主板系统上,属性文件分别是: /default.prop -- 对应编译系统 out 目录下的 .../root/default.prop /system/build.prop -- 对应编译系统 out 目录下.../system/build.prop /data/property -- 这个目录下,是persist开头
572 次浏览
发表于 2018-05-04 16:26:14

Android 系统工具

本文主要讲解一些常用的Android系统工具,它们可以查看系统的运行状态, debug系统。本文所使用的版本是 AN6。   查看源码版本 cat build/core/version_defaults.mk PLATFORM_VERSION := 6.0 PLATFORM_SDK_VERSION := 23   列出所有包名 pm list packages       Input Event getevent 查看系统input的event 事件,详见文章 "Android输入设备子系统"   ser
404 次浏览
发表于 2018-05-22 10:06:18

Android native platform 调试

tombstone 对native crash的调试,第一步是要拿到tombstone文件。位置在/data/tombstones/, 如果,文件系统没有该目录,需要手动先创建该目录,不然,不会生成tombstone文件。当crash发生的时候,debuggerd service会把进程的现场信息,写入tombstone文件。debuggerd的源文件是"system/core/debuggerd/tomstone.cpp",默认最多生成10个tomstone文件,dump 进程的 memory map。
575 次浏览
发表于 2018-06-06 15:15:28

Android apk文件结构及其安装,校验流程

apk文件 apk实际上就是一个zip文件,可以直接使用zip解压,它包含 classes.dex, 资源文件,证书,动态链接库等。 classes.dex: 代码文件,包含可以被Dalvik解释执行的字节码。build ROM的时候,还可以使用dex2oat把.dex部分代码预编译成 .odex文件,用来提高app运行的速度,因为,odex实质上是一个ELF格式的可执行文件,它里面是机器码,可以直接在虚拟机运行。 当存在 .odex文件的时候,虚拟机不需要使用JIT来运行.dex文件。 动态链接库: n
287 次浏览
发表于 2018-07-26 16:15:18

红黑二叉树详解及理论分析

什么是红-黑二叉树? 红-黑二叉树首先是一颗二叉树,它具有二叉树的所有性质,是一种平衡二叉树。普通二叉树在生成过程中,容易出现不平衡的现象,即使是使用随机算法生成二叉树,也是有一定概率生成不平衡的二叉树. 如下图所示 :                       为了解决二叉树的不平衡问题,“大牛”们终于研究出了 红-黑二叉树(red-black binary tree),它总是生成像左图那样的平衡二叉树。 红-黑二叉树的数据结构 1) 叶子节点(leaf child),和 内部节点(internal
424 次浏览
发表于 2018-04-23 17:07:55

机器学习--理解梯度下降算法

最近学习吴恩达的《机器学习》课程,没想到第一个“梯度下降”算法就把我给难住了,不明白到底是如何计算出 θ 参数的,终于找到一篇文章,详细地解释了算法的运行原理。原文是一篇英文文档,我翻译并整理了一下,原文地址: https://www.kdnuggets.com/2017/04/simple-understand-gradient-descent-algorithm.html   先复习一下梯度下降算法涉及到的公式: 预测函数:  h(θ)  =   θ0  +  θ1X1 +  θ2X2  +  ...
534 次浏览
发表于 2018-07-04 14:37:21

注册 忘记密码 登录
上传