8 Linux学习之路

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 8k+

mkimage使用与解包

在最初学习阶段,我们经常使用mkimage来制作uImage和ramdisk,实质是在被处理的文件前面加上64字节的头部。mkimage 制作 uImagemkimage -A arm -O linux -T kernel -C none -a 30008000 -e 30008040 -n linux-3.0 -d zImage uImagemkimage 制作 ramdisk.i...

2019-09-20 15:01:33

Android Binder 修炼之道(四)Binder 系统C++ 发送数据过程以及Server注册服务处理数据的过程

本节分析发送数据过程以及Server注册服务处理数据的过程1#define LOG_TAG "CalculateService"2//#define LOG_NDEBUG 034#include 5#include 6#include 7#include 8#include 9#include 10#include 11#include 1213#include "ICalcula

2017-08-12 11:07:24

Android Binder 修炼之道(三)Binder 系统C++实现 BpXXX代理类分析

在 Binder 系统中,分为 Client ServiceManager Server 三部分,C++是面向对象的语言,因此,这三者对应三个类的实例。ServiceManager 由 Android系统实现,我们只需要实现我们自己的 client 和 Server 类即可。    在 Binder 系统 C 的实现中,我们的 Client 和 Server 都实现了 sddone 和 r

2017-08-10 22:43:30

Android Binder 修炼之道(二)Client Server 实例

前面一节,分析了 Binder 系统中的骨架,了解了 Client ServiceManager Server 三者之间的关系,重点针对 ServiceManager 分析了服务的注册过程以及查询过程。本节,将重点放在实现一个简单的 Server 和 Client ,加深对于代码的理解。首先是 Server:我们要向 ServiceManager 注册 1 个 calcul

2017-07-29 15:26:57

Android Binder 修炼之道(一)框架分析

在 Android 系统中含有大量的进程间通讯,Android 系统的开发人员为了进程间通讯使用起来更方便,在Linux内核里搞了一个 Binder 驱动,然后利用这个 Binder 驱动进行一些进程间的数据传输。在 Android 中对如何使用 Binder 驱动进行了封装,有C版本,也有C++和JAVA版本,将它们统称为 Binder 系统。有了这些封装之后,使用者只需要调用固定的接口,便可以

2017-07-28 09:45:22

Android init.rc on property

在 init.rc 中,可以见到下面类似的用法,当一个属性值等于XX时,触发下面的事件,比如启动一个进程on property:sys.init_log_level=*    loglevel ${sys.init_log_level}那么它是如何实现的,启动时触发一次?还是任何时刻只要属性值满足条件就触发? 实验验证结果:1、启动时,如果属性满足设定条件会触发一次

2017-07-26 23:04:32

Android 5.1 截屏事件分析(Power + VolumeDown)组合键分析

为了实现组合键启动app的功能,参考了Android中截屏事件的处理流程,实现同时按下Power+音量增键启动电阻屏校准App的功能,下面是Android 代码中关于截屏按键部分的处理代码简要分析:    安卓5.0代码中,同时按住power键和音量-键一会可触发截屏事件PhoneWindowManager.java (base\policy\src\com\android\i

2017-07-24 17:22:00

电阻屏校正 tslib 五点校正算法

#include struct calibration { int x[5]; int y[5]; int xfb[5]; int yfb[5]; int a[5];};struct calibration cal;int perform_calibration(struct calibration *cal) { int j; float n

2017-07-22 12:51:19

固定 event 节点

相信与Linux驱动打交道的人都会遇到这样一个问题,由于插入Input设备的时机不同,导致内核每次创建 event 节点未必一样,给应用程序的参数设置带来困难,比如qt设置环境变量。如何做到无论啥时候插拔设备 event 节点都固定下来?网上有改内核的做法,修改event节点创建部分的代码能够解决问题,但是换个设备就白瞎了,而且对内核开刀总是显得不太优雅。解决思路: 

2017-07-07 15:53:45

Android backlight

frameworks\base\services\core\java\com\android\server\power\PowerManagerService.javapublic final class PowerManagerService extends SystemService implements Watchdog.Monitor {    ...

2017-06-18 21:38:59

Android lights system

Android 中的灯光子系统采用的是硬件访问服务框架,JNI 层的文件是 com_android_server_lights_LightsService.cpp (frameworks\base\services\core\jni)Java 程序通过 JNI 调用 setLight_native 来控制背光、通知灯、电池灯灯。 Java: frameworks/base/

2017-06-13 21:17:48

Android 修改 init.rc

Android 根目录下可以看到 init.rc ,但是却无力修改,改了也白瞎,重启就恢复了,ramdisk....init.rc 是 rootfs 中的文件,Android 将 rootfs(initramfs) link 到 linux kernel image 中,生成正常启动的boot.img, recovery 模式的 recovery.img.Android 每

2017-06-13 19:48:37

Android led_class driver

Linux的led class驱动echo 255 > /sys/class/leds/led1/brightnesscat /sys/class/leds/led1/brightnesscat /sys/class/leds/led1/max_brightness闪烁echo timer > /sys/class/leds/led1/trigger

2017-06-11 21:13:10

Android 消息处理机制——线程通信

package com.example.hasee.androidmsg;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.os.Handler;import android.os.Looper

2017-06-11 16:45:26

Android 硬件访问服务

怎么实现硬件访问服务1、JNI和HALcom_andorid_server_ledService.cpphal_led.c2、修改onload.cpp 调用 com_andorid_server_ledService.cpp 实现的函数3、修改systemServer.java    new ledService & addService

2017-06-10 22:59:22

Android JNI

什么是JNI,Java Native Interface ,Java 本地调用。Java 虽然具有跨平台的特性,但是Java和具体的平台之间的隔离是通过JNI层来实现的,Android 中 Java 通过 JNI 层调用 Linux 中的接口来实现对应的功能。JNI 层一般是由 C C++ 文件编写。Java 程序1、加载对应的JNI库,同行的做法是放在类的 sta

2017-06-10 18:45:22

设备树学习之(十三)电容触摸屏驱动

开发板:tiny4412SDK + S702 + 4GB Flash 要移植的内核版本:Linux-4.4.0 (支持device tree) u-boot版本:友善之臂自带的 U-Boot 2010.12 busybox版本:busybox 1.25友善之臂提供的资料中,触摸屏驱动采用的是一线触控,但是保留了i2c接口,驱动芯片为FT5406,本文主要实现 i2c 接口的

2017-02-16 18:05:51

第十章 内核同步方法

原子操作原子正数操作定义一个 atomic_t 类型的数据方法很平常,你还可以在定义它时给它设定初值:atomic_t v; //定义vatomic_t u = ATOMIC_INIT(0); //定义u并把它初始化为0atomic_set(&v, 4); //v = 4 atomic_add(2, &v);

2017-02-04 19:44:02

第九章 内核同步介绍

临界区所谓临界区就是访问和操作共享数据的代码段。多个执行线程并发访问同一个资源通常是不安全的,为了避免在临界区中并发访问,编程者必须保证这些代码原子的执行——也就是说,操作在执行结束前不可被打断,就如同临界区是一个不可分割的指令一样。竞争如果两个执行线程有可能处于同一个临界区中执行,那么这就是程序的一个Bug,如果这种情况确实发生了,我们就称它为竞争条件。同步避免并发和防止竞争条件称为同步。内核同步

2017-02-04 18:43:59

第八章 下半部和推后执行的工作

上半部的局限性:中断处理程序以异步方式执行,并且它有可能打断其他重要代码(甚至包括其他中断处理程序)的执行,因此中断处理程序应该越快越好。如果当前有一个中断处理程序正在执行,在最好的情况下(如果IRQF_DISABLED没有被设置),与该中断同级的其他中断被屏蔽,在最坏的情况下(设置了IRQF_DISABLED),当前处理器上所有其他中断都会被屏蔽。因为禁止中断后硬件与操作系统无法通信,因此,中

2017-02-02 20:24:24

查看更多

勋章 我的勋章
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。