自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zhang_heaven的专栏

真正的英雄是那些看清了生活真相,却依然热爱生活的人

  • 博客(33)
  • 资源 (17)
  • 收藏
  • 关注

原创 基于QEMU的vexpress-a9的初始化代码运行(二)

这个part是想详细走读一下用qemu运行kernel的最初始代码,也就是使用qemu运行kernel代码的详细逻辑,从qemu加载根目录下vmlinux镜像的逻辑,也就是运行arch/arm/kernel/head.S的整个过程,直到跳转到start_kernel,使用的kernel版本还是3.18。指令(add pc, r10, #PROCINFO_INITFUNC)执行后,PC跳转到__v7_ca9mp_setup,于是就来跑到__v7_setup相关的代码,这部分主要是初始化CP15寄存器。

2024-02-18 10:06:59 799

原创 基于QEMU的vexpress-a9的初始化代码运行(一)

这个part是想详细走读一下用qemu运行kernel的最初始代码,也就是使用qemu运行kernel代码的详细逻辑,从qemu加载根目录下vmlinux镜像的逻辑,也就是运行arch/arm/kernel/head.S的整个过程,直到跳转到start_kernel,使用的kernel版本还是3.18。

2024-01-24 09:57:34 905

原创 基于QEMU的vexpress-a9开发调试环境搭建

具体方法是,在之前我们编译过kernel镜像是,内核帮我们生成过一个arch/arm/boot/compressed/vmlinux.lds,我们改写一下其中的TEXT_OFFSET从0改成0x60010000即可,再重新编译一下kernel镜像(make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm zImage)即可将arch/arm/boot/compressed/vmlinux的链接地址从0修改到0x60010000上。

2023-09-04 20:59:53 257

原创 AliOS-Things+ESP32 BLE篇 (1)BLE peripheral

由于STM32的板子没有自带蓝牙和wifi模组,所以外设方面的demo,我选择放到乐鑫的ESP32模组上。一方面是由于这部分

2020-05-31 11:59:07 1594

原创 AliOS-Things+STM32 (八) 进程管理(下)

上一章,我们已经分析过一些基本的task初始化,以及让第一个task调度后运行起来了。这只是一个开始,我们还需要关注三个问题:在SCHED_RR模式下,进程时间片消耗完毕了,怎么切换给同一优先级的另一个待运行的进程呢?当进程主动自己调度,调度器如何切换呢?当进程因为sleep/等待同步时间被block住,调度器怎么调度呢?带着这三个问题,我们往下看先看下当时间片用完,也就是触发了...

2020-04-11 11:46:59 1302

原创 AliOS-Things+STM32 (七) 进程管理(上)

在alios things启动过程中,krhino_init中,做完memory堆初始化,就会初始化进程相关的东西。在分析的过程中,默认RHINO_CONFIG_KOBJ_LIST,RHINO_CONFIG_KOBJ_DYN_ALLOC,RHINO_CONFIG_SCHED_RR都使能,RHINO_CONFIG_CPU_NUM为1。RHINO_CONFIG_SCHED_RR表示高优先级会抢占低优先...

2020-03-31 09:28:51 1383

原创 AliOS-Things+STM32 (六) 堆内存管理(下)

在上一篇中分析了RHINO_CONFIG_MM_BLK/RHINO_CONFIG_MM_TLF_BLK_SIZE没有打开的情况下,堆内存的初始化,和分配释放,现在再了解一下开启这两个宏后的情况。还是从krhino_init_mm_head开始(略去上一篇分析过的部分):kstat_t krhino_init_mm_head(k_mm_head **ppmmhead, void *addr, s...

2020-03-25 16:35:11 1250

原创 AliOS-Things+STM32 (五) 堆内存管理(上)

开发过程中,写代码用得最多的就是对堆的malloc和free了, 在alios这样的小系统中,我们看下是如何处理堆内存的。跟堆内存相关的有如下几个宏:RHINO_CONFIG_MM_TLFRHINO_CONFIG_MM_BLKRHINO_CONFIG_MM_TLF_BLK_SIZERHINO_CONFIG_MM_DEBUG其中RHINO_CONFIG_MM_BLK和RHINO_CO...

2020-03-14 21:04:50 1463 1

原创 AliOS-Things+STM32 (四) 同步机制(buf_queue)

Alios中的buf_queue,相当于Freertos中的msg queue,是一种很常用的消息同步机制,

2020-03-03 21:35:43 1133

原创 AliOS-Things+STM32 (三) 同步机制(mutex)

一个操作系统中,进程的同步机制很多,这篇先介绍比较基础的mutex,因为有些后续的内容也会用到mutex,所以先介绍。Alios中的mutex结构体如下:typedef struct mutex_s { blk_obj_t blk_obj; /*blk对象,记录task调用mutex如果被阻塞住时的一些信息记录*/ ktask_t *mutex_tas...

2020-02-25 17:17:53 1385

原创 AliOS-Things+STM32 (二)一个带命令行的helloworld

上一篇简要的整理了一下环境搭建。一般调嵌入式代码,最好配好命令行输入,这样就能在调试的时候,方便执行固定的测试命令。Alios-Things里面已经有现成的CLI命令输入框架,只要打开相应的宏就能够直接用,我们在app/example/helloworld/Config.in中,加上select AOS_COMP_CLI,再像上一章那样,导出keil工程,编译就可以了。--- a/app/exa...

2020-02-23 18:31:57 1229

原创 AliOS-Things+STM32 (一)运行环境搭建

AliOS Things 是一款由阿里巴巴开发的轻量级物联网操作系统, 在我理解毕竟是大厂推的IOT操作系统,未来潜力巨大,所以有空实践了一下,做个专题分享。硬件平台选了STM32板子,后续为了实践BT/WIFI会使用ESP32,都是比较经典的平台,目的就是让大家容易上手了解alios things这款系统。Alios环境配置首先下载alios的code: git clone https:/...

2020-02-22 17:30:01 3066

原创 kernel 动态修改dtb方案

DTB是在uboot进kernel时,被load到内存中, 然后在linux中 start_kernel ->setup_arch->unflatten_device_tree 中,从内存中读取,展开成树型的数据结构,供内核驱动查找。一般来说,linux中,不会对dtb做什么改动。但如果有特殊需求,想统一几个类似产品的不同配置,修改一些驱动参数,而又不想动uboot的话(一般OTA升级...

2018-03-25 19:35:38 11619

原创 使用u-boot_2016_01启动mini2440(二)uboot内存分布

启动内存的分布主要是在board_init_f内划分的

2016-04-04 20:54:33 2002

原创 使用u-boot_2016_01启动mini2440(一)启动代码

笔者有块mini2440开发板,最近又拿出来玩了下,所以想写个总结而已。网上之前成熟的mini2440 uboot代码好像都是用u-boot_2013以前的版本,2013以后的版本启动代码做了相当的修改,所以这里移植起来花了点力气。相关代码已经上传到https://github.com/13xiaobang/mini2440-uboot_2016.01.gitmini244

2016-04-03 19:52:25 2552

原创 基于Linux3.4的RTC驱动分析(rtc-pl031): 一.device注册

RTC驱动有很多, LZ将要讲的是kernel/drivers/rtc/rtc-pl031.c驱动, 这应该算是一个AMBA的一个比较标准的驱动,而且LZ的代码是Linux3.4的哦。说实话,LZ对RTC了解不多,估计RTC的功能也就是让系统启动时获得当前时间,还有就是定时上报中断(闹钟, 定时关机等功能)。因为LZ主要从事手机(Android)开发的, 所以以后说系统可能主要是用手机一词代替

2012-11-17 17:37:26 1725

转载 android中 phone类的分析

我们的这篇文章主要就是讲了在android中 phone类的分析,这样我们就更好的了解了phone这个类,我会在每一句代码后面都会加上注释,这样我们就会跟更好的了解phone类了。那么我们还等什么,就开始看代码吧。       AccelerometerListener:感应器监听类,此类用于监听感应加速器,会通知客户端水平和重力感应信息  ADNList extents ListAc

2012-05-22 22:12:42 1071

转载 Android RIL 原生代码(c/c++) 和 java代码部分分析

Android系统源代码目录里面: hardware/ril 目录包含了所有有关于telephony的底层代码.1.目录架构(20101215的git版本):ril|-- CleanSpec.mk|-- include|   `-- telephony|       |-- ril_cdma_sms.h|       `-- ri

2012-05-07 22:55:54 901

转载 linux c xml 读写

在网络上似乎找不到太多的资料。我觉得 http://www.xmlsoft.org/tutorial/index.html的教程不错。给大家介绍一下。。是英文,不过很简单。相信做编程的人不会看不懂。。给出国内的一资料,写得也很不错。(程序 我测试过了)使用简介数据类型:xmlChar  替代char,使用UTF-8编码的一字节字符串。如果你的数据使用其它编码,它必须被转换到

2012-03-19 21:47:29 5830

转载 Linux Notification 机制的分析

1. 基本机制 1)数据结构 struct notifier_block { int (*notifier_call)(struct notifier_block *self, unsigned long, void *); struct notifier_block *next; int priority; /*用于对注册者进行优先级排队,高优先级的处理例程将被优先执行,

2012-02-07 22:29:07 873

转载 i2c- sda挂死分析

i2c- sda挂死分析I2C是由Philips公司发明的一种串行数据通信协议,仅使用两根信号线:SerialClock(简称SCL)和SerialData(简称SDA)。I2C是总线结构,1个Master,1个或多个Slave,各Slave设备以7位地址区分,地址后面再跟1位读写位,表示读(=1)或者写(=0),所以我们有时也可看到8位形式的设备地址,此时每个设备有读、写两个

2012-01-06 21:08:14 1783

转载 I2C总线协议学习笔记

1.I2C协议   2条双向串行线,一条数据线SDA,一条时钟线SCL。   SDA传输数据是大端传输,每次传输8bit,即一字节。   支持多主控(multimastering),任何时间点只能有一个主控。   总线上每个设备都有自己的一个addr,共7个bit,广播地址全0.   系统中可能有多个同种芯片,为此addr分为固定部分和可编程部份,细节视芯片而定,看datash

2011-12-29 20:57:25 727

原创 Linux环境下最简单内核模块的实践

1. 最简单驱动源文件#include #include MODULE_LICENSE("Dual BSD/GPL");static int hello_init(void){ printk(KERN_ALERT" Hello World enter\n"); return 0;}static void hello_exit(void){ printk(KERN_ALER

2011-11-17 20:49:02 492

转载 MFC中获取MainFrame,Doc,View,App等指针的方法

VC中常用的文档类,视图类,框架类,应用程序类,自定义类中获取其它四个类的方法 A: GET App    AfxGetInstanceHandle()    AfxGetApp() GET Frame->View->Document     SDI   AfxGetMainWnd() -> GetActiveView() -> GetDocument()     MD

2011-11-10 20:26:40 1857 1

转载 类中使用 createthread 如何传递this

C++对于托管代码的封装一向不是很尽善尽美,从最初的static成员函数到MFC的消息映射表,及至ATL的thunk机制。真可谓花样百出、层出不穷了。究其原因,这乃是C++的this指针惹的祸,这个“祸害”也就是Borland的VCL是用Object PASCAL编写的,而C++ Buider只能提供VCL的动态链接之缘由了。然而,我在不经意之间却获得了另一个封装的方法,完全脱离了stat

2011-11-07 20:55:51 3975

转载 VC中调用cmd命令的四种方式

1. system方法:原型:int __cdecl system(const char *);例如:system("ipconfig");2. WinExec方法:相比于system方法,WinExec方法多了一个窗口参数:原型:UINT WinExec( LPCSTR lpCmdLine, UINT uCmdShow);例如:WinExec("ip

2011-11-06 15:21:51 18937

原创 《C陷阱与缺陷》 第五章 库函数

5.1 返回整数的getchar函数getchar 函数的原型是 int getchar(void) 这意味着像以下这种程序:char c;while((c = getchar())!=EOF){ putchar(c);}会造成歧义,编译器会将int转成char传递给c,再判断EOF,有的编译器中c甚至容不下EOF,造成错误。5.2 更新顺序文件这一节说的是fre

2011-11-05 19:29:39 591

转载 VC++的Unicode编程

一、什么是Unicode  先从ASCII说起,ASCII是用来表示英文字符的一种编码规范。每个ASCII字符占用1个字节,因此,ASCII编码可以表示的最大字符数是255(00H—FFH)。其实,英文字符并没有那么多,一般只用前128个(00H—7FH,最高位为0),其中包括了控制字符、数字、大小写字母和其它一些符号。而最高位为1的另128个字符(80H—FFH)被称为“扩展ASCII”,一

2011-10-30 11:08:27 397

原创 《C陷阱与缺陷》 第四章 连接

4.1  什么是连接器C语言中的一个重要思想: 分别编译,然后整合到一起。典型的连接器把有编译器或汇编器生成的若干目标模块,整合成一个被称为载入模块或可执行模块的实体。连接器通常把目标模块看成是由一组外部对象组成的。所谓外部对象,指的是每个没有声明为static的函数或者外部变量。连接器的重要工作是处理外部对象的命名冲突。连接器的另一个工作是对其他模块中的外部对象的引用,比如调

2011-10-28 22:37:02 515

原创 《C陷阱与缺陷》 第三章 语义“陷阱”

3.1 数组与指针两点概念:1.C语言只有一维数组,且数组大小在编译器已经定下。2.对于一个数组,我们只能干两件事:确定数组大小和得到数组下标为0 的元素的指针。数组下标原理: Array[ n ]    等同于  *(Array+n)对于二维数组,可以理解为是以数组为元素的数组。3.2 非数组的指针C语言中字符串常量包含了字符串中所有字符以及一个‘\0’,在为字符串动态分

2011-10-27 23:14:21 448

原创 《C陷阱与缺陷》 第二章 语法“陷阱”

2.1 理解函数声明这一节主要说的是,为了程序的可读性,对于函数指针,最好用typedef定义一下,再用。2.2 运算符的优先级问题重要点:1.任何一个逻辑运算符的优先级低于任何一个关系运算符。2.移位运算符的优先级比算数运算符低,但比关系运算符要高。也就是: 算数运算符 > 移位运算符> 关系运算符>逻辑运算符,而我的理解是,在写代码时候吃不准的就加括号,在看代码时候

2011-10-25 22:42:35 446

原创 《C陷阱与缺陷》 第一章 词法“陷阱”

1.1 = 不同于 == 一般来说,程序最好写成 if(1 == a){ ........}而不是if(a == 1){ ......}另外,if((x = y) != 0){ ......}     比if(x = y){ .......}可读性要强。1.2 & 和 | 不同于 && 和 ||

2011-10-24 21:40:08 468

转载 Linux下自动生成 Makefile

在 Unix 上写程式的人大概都碰过 Makefile,尤其是用 C 来开发程式的人。用 make 来开发和编译程式的确很方便,可是要写出一个 Makefile就不简单了。偏偏介绍 Makefile 的文件不多,GNU Make 那份印出来要几百页的文件,光看完 Overview 就快阵亡了,难怪许多人闻 Unix 色变。本文将介绍如何利用 GNU Autoconf 及 Automake 这两套软

2011-10-23 13:33:22 600

opengl大杂烩.rar

opengl大杂烩 关于android opengl必看的一些入门文章

2012-11-01

surfaceflinger 大杂烩

surfaceflinger主流文章杂烩,要熟悉该模块的有用

2012-10-30

Linux Input子系统分析.pdf

很好的Linux input 子系统分析文档!

2012-03-22

I2C 协议手册

I2C协议手册, 全英文版本,供专业人士查阅

2012-01-06

Linux DMA驱动构架分析

Linux DMA驱动构架分析 很好的DMA源代码分析

2011-12-20

linux-2.6.36内核源代码(3)

linux-2.6.36内核源代码,用来测试,修改,编写驱动。

2011-11-16

linux-2.6.36内核源代码(2)

linux-2.6.36内核源代码,用来测试,修改,编写驱动。

2011-11-16

linux-2.6.36内核源代码(1)

linux-2.6.36内核源代码,用来测试,修改,编写驱动。

2011-11-16

windows核心编程第五版中文影印9

共9部分,请下全,不需要资源分!绝对真货。

2011-04-05

windows核心编程第五版中文影印8

共9部分,请下全,不需要资源分!绝对真货。

2011-04-05

windows核心编程第五版中文影印7

共9部分,请下全,不需要资源分!绝对真货。

2011-04-05

windows核心编程第五版中文影印6

共9部分,请下全,不需要资源分!绝对真货。

2011-04-05

windows核心编程第五版中文影印5

共9部分,请下全,不需要资源分!绝对真货。

2011-04-05

windows核心编程第五版中文影印4

共9部分,请下全,不需要资源分!绝对真货。

2011-04-05

windows核心编程第五版中文影印3

共9部分,请下全,不需要资源分!绝对真货。

2011-04-05

windows核心编程第五版中文影印2

共9部分,请下全,不需要资源分!绝对真货。

2011-04-05

windows核心编程第五版中文影印1

共9部分,请下全,不需要资源分!绝对真货。

2011-04-05

空空如也

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

TA关注的人

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