自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 资源 (1)
  • 收藏
  • 关注

原创 4-安卓底层-HAL层-实现安卓控制LED

Android硬件抽象层(HAL)Android的硬件抽象层,简单来说,就是对Linux内核驱动程序的封装,向上提供接口,屏蔽低层的实现细节。也就是说,把对硬件的支持分成了两层,一层放在用户空间(User Space),一层放在内核空间(Kernel Space),其中,硬件抽象层运行在用户空间,而Linux内核驱动程序运行在内核空间。为什么要这样安排呢?把硬件抽象层和内核驱动整合在一起放在内核空间

2017-02-20 18:56:11 697

原创 3-安卓底层-实现安卓控制LED

安卓源码目录:abi bootable dalvik device frameworks libnativehelper ndk pdk systemart build developers docs hardware Makefile out prebuiltsbionic

2017-02-17 20:04:50 662

原创 2-安卓底层-java实现调用linux系统调用

java实现调用linux系统调用流程: java –》 jni —》 driver java 实现的是native方法 jni 实现的是调用linux 系统调用 java_open = method结构体 ==> Jopen == jni里调用 => open(系统调用) ==> driver_open驱动:ibo.c#include <linux/kernel

2017-02-16 20:27:30 1366

原创 1-安卓底层-基础

1-安卓底层–基础先看看代码: java 调用 C/C++ 代码1.TestJni.javapublic class TestJni{ static{ System.loadLibrary("xxx"); //加载 libxxx.so 库文件 } public native void hello(); //本地方法,在so文件里实现 public static void

2017-02-16 20:27:11 569

原创 1-Java的命名规则_关键字_数据类型_类_对象_面向对象的编程语言_封装_构造器_重载_this关键字_static修饰

JAVA开发环境:JDK—Java开发环境JDK中包含JRE JRE—Java的运行环境JRE中包含JVM虚拟机 JVM存在于JRE中bin目录内JVM虚拟机两大特性:GC垃圾回收机制通过new开辟的空间,不需要free释放,自动的被JVM虚拟机释放了 人为不可干涉跨平台 => 半编译半解释实现的第一个Java代码:1.任何的代码都应该写在类中2.通过关

2017-02-03 16:38:12 329

原创 8-输入子系统

输入子系统:输入设备是嵌入式系统必不可少的组成部分,输入设备的类型和物理形态多种多样,如鼠标,键盘,触摸屏等等,尽管形式多样, 但是他们都有一个共通性,即一个输入设备发生一个输入事件(如鼠标点击一下,按键按一个键等等),内核收到该输入事件后对其处理, 并将处理结果汇报给应用层。根据这些特性,linux内核构建出了输入子系统框架,供linux驱动开发者们使用。优点: 1.减少驱动开发者的工作

2017-02-03 15:25:07 219

原创 7-i2C总线_mpu6050驱动编程

i2c总线协议:历史: 是飞利浦公司在80年代,为研发音视频模块的通讯而产生。因其具有的诸多优点,而沿用至今。优点: 1.简单性2.有效性3.多主控性。i2c总线的信号:1.起始信号:当scl保持高电平期间,sda由高到低跳变,称为起始信号。2.结束信号:当scl保持高电平期间,sda由低到高跳变,称为结束信号。3.数据位: 当scl保持高电平期间,sda保持电平稳定有效性,称

2017-02-03 15:24:47 2066

原创 6-定时器_锁_互斥体_自旋锁_原子操作

内核定时器编程:时钟脉冲:它是soc的重要指标和性能参数。供内核使用(进程调度,计时)。也称为时钟中断,通常是操作系统的0号中断。jiffies:内核中表示自系统开机以来,一共发生了多少次时钟脉冲。HZ:内核中表示一秒钟发生多少次时钟脉冲Tick:内核中表示两次时钟脉冲之间的时间间隔。内核中在软件层面。提供了一系列数据结构和函数供于底层驱动计时编程。步骤:1.定义: struct

2017-02-03 15:24:25 683

原创 5-设备树_中断

设备树:是描述硬件信息的asiII文本文件,其书写符合人类思维习惯。历史:在linux更新维护过程中,linux创始人linus发现在收到arm平台负责人的维护邮件后,提出了linux内核中由来已久存在的问题。 即硬件代码在linux内核中,管理无序混乱,冗余,效率低。提出借鉴powerPC架构的FDT机制,来描述硬件。由此在linux3.0以后的版本 引入了设备树的概念。其中比较显著的特

2017-02-03 15:23:41 1005

原创 4-platform总线_基础驱动模型

platform总线:是管理片上资源的虚拟总线platform组成: 1.platform_device: 描述与硬件相关信息的数据结构体2.platform_driver: 描述与硬件无关的数据结构体3.platform_bus_type:管理和匹配platform_device和platform_driver基础驱动模型:1.device2.device_driver3.bus_

2017-02-03 15:23:17 325

原创 3-字符设备框架_创建设备文件

字符设备框架:字符设备类包含了同种的字符设备。/sys/class每种设备都有struct cdev来描述的:struct file_operations *ops = &hello_op cdev_init(&cdev,&hello_op)dev_t *dev = &devno cdev_add(&cdev,devno,1)

2017-02-03 15:22:55 280

原创 2-驱动_加载函数_卸载函数_注册设备号_led驱动示例代码

字符设备框架:字符设备类包含了同种的字符设备。/sys/class每种设备都有struct cdev来描述的:struct file_operations *ops = &hello_op cdev_init(&cdev,&hello_op)dev_t *dev = &devno cdev_add(&cdev,devno,1)

2017-02-03 15:17:13 378

原创 1-驱动

驱动:必做实验一、二、四、五、十一十天:模块、字符设备框架以及接口、led驱动platform总线 原子操作 自旋锁 信号量 IO模型外设驱动:按键驱动、蜂鸣器驱动、ADC、I2C、输入子系统学习驱动时需要的基础:1、驱动接口的理解 %502、操作系统内核机制 %303、硬件 %20第一天的重点内容:模块、字符设备框架什么是驱动?driver驾驶员.在内核中提供的一系列接口来操作

2017-02-03 15:16:32 196

原创 2-内核的编译_uImag_zimage_设备树

内核的编译:make uImage 1、在顶层目录下搜索uImage发现找不到,有可能uImage存在于其他的Makefile文件中2、include arch/arm/Makefile3、进入到arch/arm/Makefile中,寻找uImage目标 299 BOOT_TARGETS = zImage Image xipImage bootpImage uImage 304

2017-02-03 15:15:14 894

原创 1-系统移植_u-boot移植

c语言、汇编、脚本、Makefile、Kconfig、设备树装windows:BIOS界面、运行系统内核、安装驱动、装软件移植就是给一个开发板装一个系统:学完这门课之后我们都是嵌入式的网管嵌入式平台:引导程序(u-boot)、uImage、写驱动(改驱动)、第三方源码(相当于一个应用软件)* 什么是移植?软件系统移植、硬件系统移植一个平台的代码应用到另一个不同体系的平台上,需要做的工作就是移植在移植

2017-02-03 15:14:25 381

原创 3-伪指令_FIQ_IRQ_乘法

伪指令:编译器识别的指令。ldr伪指令 ldr r0,=0x12345678ldr指令 ldr r0,[r0]mov r0,r1,asr #4start:cmp r0,r1beq stopsubgt r0,r0,r1sublt r1,r1,r0b startstop:乘法指令:mul r0,r1,r2 r0 = r1*r2mla 乘加mull 64位乘法mlal 乘加

2017-02-03 15:10:14 380

原创 2-ARM_流水线_汇编

3级流水线:取指、译码、执行ARM7 ARM v4最佳流水线ARM9 5级流水线 -1. f(ADD) 0. d(ADD) f(SUB) 1. e(ADD) d(SUB) f(ORR) F取指 D译码 E执行 -1. ADD 0. SUB ADD 1. LDR SUB 2. AND LDR 3. OR

2017-02-03 15:09:18 314

原创 1-ARM处理器_大小端

ARMARM支持的数据格式:byte:8bit charhw:16bit shortword:32bit intdw:64bit long long* ARM(32bit) thumb(16bit)* ARM处理器工作模式:user:唯一的非特权模式,只能操作普通的寄存器system:特权模式,使用和user一样的寄存器,PCFIQ:快速中断IRQ:普通中断SVC(Sup

2017-02-03 15:08:34 2267

原创 20-进程_pstree_kill_fork_execl_waitpid_练习

进程* 进程 程序的一次动态执行过程进程生命周期:创建:创建虚拟地址空间、地址空间分段,创建task_struct结构(PCB进程控制块)调度:内核管理task_struct结构组成的链表,根据优先级和进程属性分配时间片执行:进程获得时间片到cpu中执行消亡:进程结束,回收虚拟地址空间,由父进程回收task_struct结构。虚拟地址空间分段:stack:栈区,存放局部变量、函数传

2017-02-03 15:08:04 271

原创 19-io_文件权限掩码_动态库_静态库

I/O* 标准IO:库 带缓存 通过流FILE * 操作文件* 文件IO:系统调用 不带(内核缓存) 通过文件描述符操作文件* 文件描述符: !最小未用非负整数 作为一个索引来操作文件使用open :flags:必须3选1:O_RDONLY,O_WRONLY,O_RDWRO_APPEND 追加O_CREAT 使用这个参数必须指定modeO_EX

2017-02-03 15:07:32 296

原创 18-io_ctags配置

I/O man 1 命令 man 2 系统调用 内核给用户留出的接口 man 3 库 以二进制形式存在的函数集合文件类型 :-普通文件 ( 二进制、ASCII )p 管道d 目录s 套接字l 链接c 字符设备b 块设备Input:输入:数据由内核空间流向用户空间流:用来表示数据的方向标准IO中 系统预定义的3个流: stdin标准输入std

2017-02-03 15:06:49 210

原创 17-tree_queue_linkstack_linkqueue_代码案例

代码 1 : tree#include <stdio.h>#include <stdlib.h>typedef struct node{ int data; struct node * lchild; struct node * rchild;}tree_t;//创建tree_t* create_tree(int data,int max){ if(data>ma

2017-02-03 15:06:21 238

原创 16-栈的几种用法_案例代码

栈:代码 1 : stack#include <stdio.h>#include <stdlib.h>//类型typedef struct node{ int *data; int top; int size;}stacks_t;//创建stacks_t * create_stack(int size){ if(size<0||size>1024)

2017-02-03 15:05:58 189

原创 15-双向链表用法_案例代码

双向链表代码 1 :#include <stdio.h>#include <stdlib.h>typedef int data_t;typedef struct node{ data_t data; struct node * front; struct node * next;}duolist_t;//创建duolist_t* create_duolist(){

2017-02-03 15:05:43 190

原创 14-链表用法_案例代码

链表代码 1 :#include <stdio.h>typedef struct node{ int data[10]; int newdata[0];}list_t;int main(int argc, const char *argv[]){ list_t list; printf("%d\n",sizeof(list_t)); printf("%p\n",&li

2017-02-03 15:05:19 176

原创 13-Makefile基本语法

* head.h : 函数声明 、头文件名(C库、系统调用) 、全局变量 、 宏替换、结构体类型声明make 文件 :1、 Makefile makefile GNUmakefile 在同一目录下只能出现一者执行方式 : make2、test.mk test.AIX test.Linux执行方式 :make -f test.mk目标文件:依赖文件 通过依赖文件得到目标文件的命令

2017-02-03 15:05:03 160

原创 12-Shell脚本_练习

变量 :使用变量时, 必须在变量名前加$用户自定义变量 : 没有数据类型和存储类型直接定义使用, 在定义时必须赋值在 = 的左右两端不要出现空格符 如果值出现空格, 需要使用” “echo $var : 不关心不可见字符echo “$var” : 原样输出 *exit : 退出 , 结束* 一条命令的输出结果作为值赋给变量时, 需要使用 ` ` (命令置换符)vi 分屏 :

2017-02-03 15:04:50 279

原创 11-linux-c基础2

diff : 比较两个文件diff:比较两个文件diff file1 file2 : 如果在终端屏幕没有任何显示结果, 代表两个文件内容一致打补丁 :1、diff -ruN old new > diff.txt 2、cd old3、patch -p1 < ../diff.txt : 打补丁操作patch -Rp1 < ../diff.txt : 撤销补丁操作压缩文件: (操

2017-02-03 15:04:33 149

原创 10-linux-c基础_管道_putty配置

内核版本 :主版本号.次版本号.释出版本-修订版本主、次为奇数 : 开发版主、次为偶数 : 稳定版软件包 :软件包名称软件版本-修订版本体系架构.deb * sudo : 借助某些用户的权限完成操作 , 默认为root用户.软件包安装dpkg :1、离线安装, 安装的软件包必须事先存在.2、不会对软件包的依赖关系进行检查安装 : sudo dpkg -i 软件包卸载 : sud

2017-02-03 15:03:34 306

原创 9-malloc练习

malloc 练习 :#include <stdio.h>#include <stdlib.h>#include <string.h>void getmemory(char *p){ p = (char *)malloc(100);}int main(int argc, const char *argv[]){ char *str = NULL; getmemor

2017-02-03 15:03:20 278

原创 8-数据类型_处理5个学生的数据

数据结构练习:构造一个学生类型 : 姓名, 年龄, 学号, 成绩处理5个学生的数据;循环输入学生信息;找出成绩最高的学生, 并且打印其信息(注意:不要排序).按照成绩排序, 并且打印其信息.#include <stdio.h>typedef struct student{ char name[128]; int age; int id; int scor

2017-02-03 15:03:07 465

原创 7-函数指针_字符串转整数练习

当参数为:一个普通变量时变量的值 : 复制传参变量的地址 : 地址传参函数 : 获取两个变量num1 = 123, num2 = 456;完成数值交换 ==> num1 = 456, num2 = 123;练习 :输入一个字符串 “1234” , 得到整型值 1234 ;#include <stdio.h>int fun(char *p){ int num = 0;

2017-02-03 15:02:39 262

原创 6-字符指针_删除字符串中的空格_register_指针数组

字符指针 :在给字符指针初始化赋值时, 如果赋的值为字符串常量的首元素的地址; 则在后面的代码中, 不能通过该指针去修改字符串常量中字符的值.练习 :删除字符串中的空格. “hell o” === “hello”,输入的为”quit” ; 结束程序.#include <stdio.h>#include <string.h>int main(int argc, const char

2017-02-03 15:02:06 1588 2

原创 5-二维数组_练习_字符串处理函数_指针

二维数组 :存储类型 数据类型 数组名[行数][列数]列数不能够省略 , 行数可以省略数组元素的引用 : 数组名[行标][列标]练习 :1.找出二维数组中的最大值, 如果有多个最大值, 找出其位置以及数值.(不要排序).#include <stdio.h>int main(int argc, const char *argv[]){ int a[3][4] = {{1,23,4,

2017-02-03 15:01:24 567

原创 4-循环练习_数组

循环练习:1、 求出1到10000 之间的完全数.#include <stdio.h>int main(int argc, const char *argv[]){ int num, sum = 0; int i; for(num = 1; num <= 10000; num++) { for(i = 1, sum = 0; i <= num/2; i+

2017-02-03 14:58:46 337

原创 3-man手册_字符串处理函数

man 手册man 1 : 命令man 2 : 系统调用man 3 : C库函数参数查询vim -t 参数名继续向下查找; ctrl + ]返回上一层; ctrl + ovim -t 需要安装 ctags 解压内核 tar -vxf 压缩文件切换到内核目录下ctags -R 生成tags文件配置~/.vimrc 加入一行 set tags+=tags路径格式输出函数 : in

2017-02-03 14:57:59 383

原创 2-变量类型_变量_内存分区

八进制 与 二进制一位八进制数 对应 三位二进制数十六进制 与 二进制一位十六进制数 对应 四位二进制数进制二进制 : 0b 或者 0B八进制 : 0 0123十六进制 :0x 或者 0X数据类型:short短整型 占用 2个字节int整型 占用4个字节 16位系统下 , int 占2个字节long长整型 占用4个字节(32) 8个字节(64位系统下)

2017-02-03 14:57:23 238

原创 1-vi编辑器与编译

VI编辑器命令模式 进入编辑模式, i a o 或者 I A O 进入底行模式, shift + ; 或者 空格复制 yy : 复制一行 3yy : 复制3行 鼠标选中 ,y剪切 dd : 删除一行 3dd : 删除三行 dd : 删除一行粘贴 : p撤销 : u重做 : ctrl + l底行模式 w 保存 q

2017-02-03 14:54:33 412

Genymotion-ARM-Translation

可以在genymotion上装微信。 genymotion 破解神奇

2015-07-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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