自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(134)
  • 收藏
  • 关注

原创 uboot给Linux传参分析

Cmdline常用参数格式简介就是console=ttySAC2,115200 root=/dev/mmcblock0p2 rw init=/linuxrc rootstypes=ext3就是这样的由很多个项目用空格隔开依次排列,每个项目中都是项目名等于 项目值整个cmdline会被我们内核启动时解析,解析成一个一个的项目名 项目值的字符串这些字符串又会被再次解析从而影响我

2017-12-04 19:41:28 290

原创 uboot前转

uboot 2种编译方法(1)编译复杂项目,Makefile提供两种编译管理方法,默认情况下是当前文件夹中的.c文件编译出来的.o文件会放在同一文件夹下。这种方式就叫做原地编译。原地编译的好处就是处理起来简单。(2)原地编译有一些坏处:1.污染了源文件目录,原来源文件里面只有.c .s文件,现在被污染了,有了很多.o文件,所以就会出现编译完了之后忘了清理,把它打包,就会特别大。2.一套源代

2017-11-28 11:52:12 226

原创 移植Uboot-2017(1)

移植uboot 2017-07到S5PV210上1. 使用uboot源码里面本身有的代码的基础上进行修改   Arch/arm/cpu/arnv7这个目录   Board/samsung/goin 这个目录2. 代码看了一下,第一阶段不用怎么改,但是我们需要调试知道我们运行到了哪一步,于是我们在Lowlevel_init.S下改了如下地方在uboot的第一阶段上面加上.wo

2017-11-28 11:44:08 1516

原创 U-BOOT源码目录

uboot的源码目录分析;各文件介绍(1) . gitignore,这是个git的工具,git是一个版本管理工具。这个文件和git有关,和uboot本身无关的,不用去管(2)  config.mk ,后缀是.mk,是一个makefile,将来在makefile中会去调用它(3)MAINTAINERS 维护者,就是当前在参与维护uboot源码的社区工作者(4)Makefi

2017-11-04 16:10:00 359

原创 Makefile学习

Makefile1. 目标目标就是我们要去make xxx的那个xxx,就是我们要生成的东西。2 依赖依赖就是生成目标的原材料3. 命令命令就是加工方法,所以make xxx的过程其实就是使用命令将依赖加工成目标的过程通配符 %和makefile自动推导(规则)(1) %号是我们makefile的通配符,代表一个或者几个字母       %.o就代表所有以.

2017-11-02 21:14:17 319

原创 shell编程

Shell运行程序有多种方法,这里介绍3种方法1.  ./xx.sh,和运行二进制可执行程序一样,这样运行shell要求shell程序必须有可执行权限。2. Source xx.sh source是Linux一个命令,这个命令就是用来执行脚本程序的,这样运行不需要脚本具有可执行权限。3. Bash xx.sh 这个bash你可以理解成脚本语言的解释器。本质上是一个可执行程序,这样执行相

2017-11-02 17:54:34 206

原创 uboot学习(1)

我们的异常向量表放在0地址处,如下图这个地址就是这个地址,不是随便写的,如果说我的异常向量表要放在这个位置,说白了异常向量表是代码,意思是你这个代码就在0地址??但是打开我们的芯片数据手册的memory map章节,可以看到下图这张图可以看出,0地址放的是IROM和IRAM,为什么要有这段地址,实际上是CPU把真正的IROM和IRAM映射到这里,因为系统已启动就在0地址找代

2017-10-30 19:14:51 322

原创 linux进程调度4

Linux可能运行在多核的环境下,Linux就会在这多个核直接负载均衡,每一个核跑的调度算法都是前面说的FIFO,RR,CFS。但是Linux会自动分布在多个核上,自动负载均衡。每个核都有可能把自己的tast_struct从自己的核推到旁边一个核,然后有一个核也可能把自己的推给旁边的,但是在Linux多核场景之下,每一个核都以劳动为乐,所以当别的核把任务推给它去跑的时候,他心里面很开心。它自己闲下

2017-10-21 19:45:00 368

原创 进程调度学习3

所有的操作系统在设计调度器的时候都追求两个目标中的一个,要么就是提高吞吐率,要么就是提高某些任务的相应,其实这两个目标之间有一定的矛盾,就像拔河的两个人一样,你往吞吐率这里多一点,响应就差一点,你往相应多一点,可能就牺牲吞吐率,什么是吞吐,就是我发一分钟去看这个linux,它把所有时间都用在解决负载,比如你有很多事情要做,你把时间花在有用功上,而不是无意义的上面,响应是指某些任务的响应要快,比如说

2017-10-18 22:10:53 306

原创 linux进程调度2

Fork前面创建的是一个进程,假设进程P1,调用fork之后,然后进程P2就被创建,P1是一个task_struct,p2也是一个task_struct,所以在内核里面这是两个task_struct,在内核的调度算法的层面上主要看到一个task_struct,他就会被调度,linux在P1刚刚把P2创建出来的时刻,linux会认为P1和P2之间会有某种内在的联系,前面有提到,task_struct

2017-10-16 22:43:18 371

原创 Linux进程调度学习1

当我们说进程的时候,就必然要说道线程,在Linux里面经典定义是进程是一个支援分配的单位,所以,你搞清楚一个进程,就是搞清楚它的资源,当我们要说进程的时候,首先要说Linux里面是用一个什么样的数据结构去描述它这是个process control block(进程控制块)这是OS里面通用的概念,在linux里面,进程控制块就是一个task_struct结构体这个时候,我们应该怎么记住这

2017-10-14 13:06:33 366

原创 全程解析Linux鼠标驱动

/* *  Copyright (c) 1999-2001 Vojtech Pavlik * *  USB HIDBP Mouse support *//* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU

2017-10-13 09:27:18 953

原创 i2c适配器驱动程序

我们先来参考一下内核中自带的驱动程序,看看别人怎么写的我们可以对内核进行make menuconfIg 看看它对应于哪一个文件这里有个S3C2410 I2C Driver然后按下H可以看到它依赖于那个配置这里是依赖于我们的CONFIG_I2C_S3C2410这个配置的我们在driver/i2c目录下搜索,CONFIG_I2C_S3C2410,看看它对应哪个文件

2017-10-05 11:53:13 452

原创 用户态访问I2C设备

显然内核里面有万能的驱动程序给我们用看看内核文档 在\linux-4.8.14\Documentation\i2c下面的这里有的dev-interface,这里面告诉了什么,我们来看看里面说了什么通常,I2C设备由设备驱动来控制,但是他也可以提供用户空间直接访问适配器上的设备,通过/dev接口。你需要加载I2C-DEV模块有个i2c-tools 的工具包帮你写好了接口,在网

2017-10-03 18:40:43 2431

原创 分析内核源码,设备树

U-Boot需要将设备树在内存中的存储地址传给内核。该树主要由三大部分组成:头(Header)、结构块(Structure block)、字符串块(Strings block)。设备树在内存中的存储布局图如下1.1 头(header)1.2 结构块(struct block) 扁平设备树结构块是线性化的树形结构,和字符串块一起组成了设备树的主体,以节点形式保

2017-09-26 10:09:00 2388

原创 I2C设备驱动

以前我们的probe只打印,现在我们做一些有用的事情

2017-09-20 22:13:59 369

原创 I2C写设备端

先从第一步做起,怎么去注册一个设备。内核里面有个文档这里有个instantiating-devices。这个文件的名字叫做实例化设备。第一种方法第一种方法通过总线设备来声明设备,这里有个例子,我们直接看源码方便一些I2C_BOARD_INFO解析起来就是I2C单板信息。定义一个board_info结构体。I2C_BOARD_INFO("24c08",0x50

2017-09-13 00:30:35 593

原创 I2C

先来看一下原理图 这是个存储芯片。只用两跟引脚与CPU的I2C控制器相连,一个就是I2C_SCL一个就是I2C_SDA。CPU上的I2C_SCL和I2C_SDA上可以接很多芯片。每个芯片都会有个设备ID,或者称为设备地址,去看芯片的原理图,里面都有设备的地址,比如说我们这里的FM24CL04。I2C硬件协议首先CPU会发出一个start信号,保持SCL为高电平,SDA由高变

2017-09-12 01:00:48 511

原创 驱动从PC指针分析段错误

我们将驱动程序故意改一句话  我们都知道寄存器要ioremap之后才能用。在驱动程序里面不能使用物理地址 或者对那种没有初始化指针的时候你操作也会出错。我现在故意引入这个错误 我们修改以前的LED代码用来说明我们将以前的驱动程序改成下面这种然后加载并运行测试程序我们现在就根据这一大堆错我来找问题[  181.105729] Unable to handle

2017-09-10 11:51:19 2210

原创 JAVA中的包

Java中的包名称冲突问题C语言中所有的函数都是全局的,因此在多人合作的大型项目开发中,容易出现两个函数同名的情况如 A完成的.c文件中有一个名字为compare的函数,B完成的.c文件中有名为compare的函数C语言中一般是通过在函数名上加上前缀来解决名称冲突问题JAVA中是不是也有类似的情况?在JAVA里面也是有这个问题的JAVA字节码文件JAVA中的基本程序

2017-09-04 23:28:44 280

原创 JAVA中的接口与内部类

接口什么是接口?接口是JAVA中一种自定义的特殊的类接口中只能声明方法的原型,而不允许定义方法体接口中定义的属性只能是常量为什么需要接口JAVA语言中只支持单继承模式,即一个类有且只有一个父类,那我想多层继承呢,那只能继承接口了,接口只有方法原型,接口定义的属性必须是常量JAVA中的类都继承了Objiect,Objiect是所有JAVA类的父类接口的定义和使用J

2017-08-30 00:14:21 427

原创 java继承与多态

继承的基本概念生活中的继承指的是,晚辈得到了长辈的一些事物或者特性         如:小孩继承了父母的一些特性,眼睛像妈妈,鼻子像爸爸等等面向对象的语言也引入的类似的概念Java语言通过extends关键字来表明两个类之间的继承关系子类通过继承能够得到父类的属性和方法子类也可以添加自己特有的属性和方法         如:小女孩可以长得像妈妈,但是比妈妈更漂亮

2017-08-27 23:11:16 470

原创 linux设备树

设备树的最终目的提供一种语言来解析硬件配置信息 设备端:使用设备树之前硬件的描述信息,放置在一个个arch/xxx/mach-xxx/board-xxx.c的C文件中static struct resource dm9000_resource1[] ={ { .start = 0x20100000, .end = 0x20100000 + 1, .f

2017-08-19 19:09:19 1566

原创 库依赖问题解决办法

问题:执行:sudo apt-get install g++得出如下错误:正在读取软件包列表... 完成正在分析软件包的依赖关系树正在读取状态信息... 完成有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件包尚未被创建或是它们已被从新到(Incoming)目录移出。下

2017-08-18 16:49:30 782

原创 数据封装

数据封装的基本概念日常生活中的经验:并不是类的每个属性都是对外公开的如:女孩子不希望外人知道自己的年龄和身高如:一些男孩子不希望别人知道自己会尿床而一些类的属性是对外公开的如:人类的姓名、学历,国籍等因此,我们需要在我们的表示法中定义属性和行为的公开级别类似文件系统中文件的权限数据封装的基本概念封装是一个面向对象的术语,指的是把属性定义和行为方法都包装于

2017-08-14 23:29:16 4904

原创 JAVA之面向对象

面向对象的基本概念基本概念类和对象是面向对象中的两个基本概念“类”指的是一类事物,是一个抽象的概念“对象”指的是属于某个类的一个实体,是一个具体存在的事物类是一种“模版”,可以通过这种模版创建出不同的对象“实例”对象“实例”是类“模版”的一个具体实现一个类可以有很多对象,而一个对象必然属于某个类先说一个概念,老虎,我们都知道老虎是一个什么样的东西把我们在

2017-08-14 00:08:01 273

原创 JAVA第四天

运算符和表达式和C语言是一样的算术运算符++和--优先级 最高*,/,%优先级其次+,-优先级最低括号可以改变优先级逻辑运算符!运算符优先级最高&&运算优先级其次||运算优先级最低括号可以改变优先级与C语言不同的话||、&&、!结果只能是true或者false 不是0跟1关系运算符JAVA中同类型的变量和常量都可以用==和!=

2017-08-13 23:24:22 186

原创 JAVA第三天

流程控制流程控制语句是编程语言中的核心之一分支语句 if-else和switch循环语句for和while跳转语句continue和break分支语句 if条件为真执行语句,条件为假不执行 例子程序public class Main{        public static void main(String[] args){

2017-08-13 01:17:51 220

原创 JAVA第二天

JAVA语法规定,文件名必须跟文件里面被声明为public的class同名,比如我们上面的public class Main,我们那个JAVA的文件名就要叫Main这里我们主要介绍一下标识符和数据类型Java中的类名、变量名、函数名、常量名等都需要一个标识符作为它的名字那么问题就来了,我如何去定义一个标识符呢。我们想到了我们C语言也有变量名,也有函数名等等。 这些都是标识符,C

2017-08-13 01:03:47 268

原创 JAVA第一天

类(class)是JAVA语言中的基本单元,在这里我们这么理解,我们C语言中有struct结构体,struct把不同变量的类型全部集合在一块声明,比如说int型啊,float型啊。但是JAVA对这个进行了一丁点的扩展,在这个类里面不但可以定义变量,还可以定义函数,跟C语言中的struct 有所不同,给了它新的名字叫做类,在这里我们先把这个认为是一个包含了变量和函数的集合JAVA里面规定类是基本

2017-08-13 00:57:12 229

原创 安卓应用测试程序

打开我们androidstudio我们要创建一个新的安卓应用工程选第一个   start a new android studio projiect先填写应用程序的名字,我们取名为led_test,然后输入公司的名字,这个可以随便取这两个名字确定之后,包的名字也就确定了,就是con.examole.eight.led_test很多人对包这个概念没有一个认识,

2017-08-11 00:03:03 305

原创 内核中的

访问共享资源的代码 区域称为临界区。自旋锁和互斥体是保护内核临界区的两种机制自旋锁可以确保在同时只有一个线程进入临界区。其他进程想进入临界区的线程必须不停得原地打转,知道第一个线程释放自旋锁。这里说的线程不是内核线程,是执行的线程。下面的例子演示了自旋锁的基本用法#includespinlock_t mylock=SPIN_LOCK_UNLOCKED;spin_lock

2017-08-05 15:25:43 191

原创 PCIE读办卡信息代码

本代码是小白写的如果各位大神有好代码 请在下方留个方式#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include

2017-08-05 14:55:45 397

原创 pcie驱动介绍

PCIE设备的地址由总线号、设备号和功能号组成,分别称为厂家ID、设备ID和设备类代码我们可以利用lspci工具了解这些概念。PCI工具集的一部分,下载地址为http://mj.ucw.cz/sw/pciutils/下面这个照片是在xx.xx.xx.xx下面的shell终端下运行lspci,运行lspci 上面输出代码每行开头的逻辑地址(xx:yy.z).XX代表PCI的总线号。一

2017-08-05 14:51:10 17683 1

原创 Makefile学习(1)

1.基本格式target ... : prerequisites ... command target 也就是一个目标文件,可以是 Object File,也可以是执行文件。还可以是一个标签(Label),对于标签这种特性,在后续的“伪目标”章节中会有叙述。 prerequisites 就是,要生成那个 target 所需要的文件或是目标。 command 也就是 make 需要执

2017-08-02 21:01:08 200

原创 设计NDK程序

分为3步1.编写头文件2.编程源程序3.编写MAKEFILE但是头文件是用相应的命令自动产生的源文件就是我们自己写的.c或者.c++最后就是编写我们android.mk这个makefileJNI是JAVA语言调用我们C和C++的提供的一种通道一种机制 这种机制就是因为JAVA语言的弊端 NDK可以更加方便的为我们的JNI的程序开发提供帮助 这个程序的设计流程是比

2017-08-02 00:05:15 363

原创 安卓驱动程序架构

我们回忆上一篇文章的两种驱动模型第一种驱动模型当中是内核级别的驱动程序,还会有个APP我们驱动程序提供出来的接口是ioctl接口,我们APP采用的是JAVA语言编写的,但是我们JAVA语言是没有IOCTL这个函数的既然没有,怎么链接到我们底层的ioctl呢,所以这里要引入第三方,用JAVA语言写的APP调用到我们C和C++编写的程序,用JNI就可以调用JNI是JAVA NATIVE

2017-08-01 20:48:12 3954 1

原创 安卓LED驱动开发体验

我们怎么将PC上的程序放到安卓设备上,这里给大家讲一个软件ADBADB采用的是USB的硬件链路,硬件链路还有网线的。在我们PC上运行一个ADB的客户端程序,然后在我们安卓设备上运行我们adb的服务端程序有了客户端程序之后,我们可以利用客服端程序非常轻松的把我们想传到安卓设备上面的文件通过USB链路传到安卓设备上面去我们下面就讲如何用ADB传文件我们先来看看我们m

2017-07-29 16:18:54 782

原创 安卓源代码核心结构

安卓体系结构图如下第一层是我们的APP层,在这个层次中有我们熟悉的应用程序,也是我安卓系统自带的一些应用程序,比如说我们的通讯录,比如说我们的电话本,比如说我们短信,这都是我们系统自带的一些运用程序,但是除此之外还可以自己开发一些运用程序放到这个层次当中。第二层是我们框架层,在这个层次中包括了10最主要的部分。包括我们的活动管理层,窗口管理器,内容提供者,试图子系统,通知管

2017-07-29 14:21:17 2351 2

原创 安卓系统的制作

要制作安卓系统,首先需要拿到移植好的,开发板可以用的安卓源代码,这个源代码一般是在开发板光盘里面解压之后就变成了这样第一步是设置我们运行环境变量的脚本在我们源代码当中是setenv这个脚本启动我们脚本然后运行lunch lunch就是一个配置的过程这里有这么多平台类型来选择但是我们这里用的是工程版本选择你对应的工程版本选完之后会看到配置信

2017-07-22 16:55:58 4933

空空如也

空空如也

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

TA关注的人

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