- 博客(37)
- 资源 (4)
- 收藏
- 关注
原创 u-boot移植
本人喜欢用云笔记,所以在这里以链接的方式分享给大家 u-boot编译、运行 u-boot目录文件解析 u-boot Makefile分析 u-boot第一阶段源码分析 u-boot第二阶段源码分析 新增加u-boot命令 u-boot启动内核 内存分布图 ...
2019-10-21 15:20:42
166
原创 虚拟内存管理
一、虚拟内存管理我们都知道,每个用户进程可以拥有4GB的可寻址的虚拟地址空间,也可以称为进程地址空间。在32位系统中,进程可以合法访问用户空间的虚拟地址。若要访问内核虚拟地址,就要通过系统调用才行。内核中是如何来管理这些进程地址空间的呢?根据内核风格,抽象出一个结构体来描述这个进程地址空间,这个结构体就是struct vm_area_struct,看名称可以知道,这就是一虚拟地址的结构体,...
2019-10-11 17:01:55
204
原创 从内存分布图看内存管理 -----内存管理(二)
一、从内存分布图看内存管理要了解一个系统的内存管理,首先要了解这个系统的内存是如何布局的。以32位CPU为例,它最多可以拥有32根地址线,因此它最大的寻址空间为4GB。那么在这个4GB的地址空间,内核空间和用户空间究竟是怎样划分的?ARM32处理器提供7种处理器模式:1、用户模式:用户程序运行的模式2、系统模式:特权模式3、一般中断模式(irq):普通中断模式4、快速中断模...
2019-10-11 10:15:18
1029
原创 从硬件发展看内存管理 -----内存管理(一)
一、从硬件发展角度看内存管理I、远古时代的内存管理操作系统中大部分内存管理都是围绕硬件展开的,计算机硬件的变化影响着软件的实现。下面从单道批处理系统和多道批处理系统看内存管理的演变。单道编程的内存管理。所谓单道,就是整个系统只有一个用户进程和一个操作系统。这种模型下,用户程序总是加载到同一个内存地址上运行,所以内存管理很简单。实际上根本就不用内存管理单元,程序使用的地址就是物理地址。不...
2019-10-10 21:57:16
510
原创 如何编写一个系统调用
一、系统调用的概念现代操作系统,处理器的运行模式通常分成两个空间:一个内核空间,一个用户空间。大部分的应用程序都是运行在用户空间的,而内核和设备驱动程序运行在内核空间。如果应用程序需要访问硬件资源或者需要内核提供服务时,就需要通过系统调用来实现。如图为系统架构:二、系统调用有什么作用1、为用户空间程序提供一层硬件抽象接口。应用程序在读写一个文件时,无需关心底层硬件信息。2、保...
2019-10-10 13:41:19
1325
原创 编写一个简单的内核模块
一、什么是内核模块我们都知道linux内核采用的是宏内核架构,即大部分功能都在内核中实现,比如进程管理、内存管理、进程调度、设备管理等,都在特权模式下运行。而与之相反的是微内核架构,它把操作系统最基本的功能放在内核中,而其他大部分的功能(设备驱动等)都放到用户空间实现,两者相比,微内核架构有优越的动态扩展性。linux内核在发展过程中引入了内核模块机制,这样在实际应用过程中就可以通过内核模...
2019-10-09 22:07:47
1473
原创 通过Eclipse+QEMU单步调试内核
一、安装Eclipse-CDT软件sudo apt install eclipse-cdt二、创建工程打开 Eclipse 菜单, 选择“Window”→“Open Perspective”→“C/C++”。新建一个 C/C++的 Makefile 工程,在“File”→“New”→“Project” 中选择“Makefile Project with Exiting Code”,创...
2019-10-09 16:44:42
881
原创 移植u-boot-修改u-boot支持norflash
目录一、发现问题二、解决问题三、验证试验一、发现问题1、无论从nor启动还是,nand启动,都是到这里就卡住了。2、现在可以往下走了,根据norfalsh芯片手册得知,u-boot是没有支持该款flash二、解决问题1、搜索错误信息,最后发现flash启动未成功会挂起,1.1 关闭挂起操作,并且打开调试打印宏2、增加norfla...
2019-10-08 21:51:54
246
原创 移植u-boot-支持NAND启动
目录一、发现问题二、解决问题三、验证试验一、发现问题由前面分析得到,u-boot仅支持nor启动。有些板子并没有搭载norflash。所以需要增加nandflash启动。二、解决问题在重定位代码之前初始化nandflash。这里传入参数有个细节:ldr r1,_TEXT_BASE 这样一开始地址就确定了arm采用r0-r4寄存器传参重定位代码三、验...
2019-10-08 20:41:18
161
原创 移植u-boot-修改时钟,SDRAM,串口
目录一、准备工作二、调试代码三、修改代码一、准备工作由于u-boot2012并没有显性的支持2440。需要手动增加2440目录。还需要增加配置文件2440.h二、分析调试代码1、在start.S中,只是设置了时钟比例,有SDRAM的初始化/* FCLK:HCLK:PCLK = 1:2:4 */ /* default FCLK is 120 MHz ! *...
2019-10-01 14:04:35
257
原创 移植u-boot-分析启动过程
一、准备工作目录一、准备工作二、分析启动流程1、下载u-boot-2012.04.01.tarGoogle搜索u-boot第一个网站就是u-boot网站了,这里我已经提供给大家了。u-boot2012下载地址2、添加Source Insight工程方便阅读代码具体添加方法请自行Google。最好用3.5的,可能个人习惯。二、分析启动流程1、分析启动过程之概述...
2019-09-30 19:29:44
291
转载 算法 3:最常用的排序——快速排序
1、源码入口解释 算法 3:最常用的排序——快速排序假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个 10 个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了)。为了方便,就让第一个数 6 作为基准数吧。接下来,需要将这个序列中所有比基准数大的数放在 6 的右边,比基准数小的数放在 6 的...
2019-09-10 09:11:23
306
原创 分析u-boot Makefile "if" 语句
这是u-boot1.1.6 第92行出现的语句OBJTREE := $(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR))这是MAkefile中if语句:$(if CONDITION,THEN-PART[,ELSE-PART])函数功能:一个参数“CONDITION” ,在函数执行时忽略其前导和结尾空字符,如果包含对其他变量或者函数的引用则进行展开。...
2019-09-05 08:57:13
332
原创 u-boot移植详解-初识u-boot
u-boot是一种普遍用于嵌入式系统中的Bootloader。Bootloader是基于特定硬件平台来实现的,因此几乎不可能为所有的嵌入式系统建立一个通用的Bootloader,不同的处理器架构都有不同的Bootloader,Bootloader不但依赖于cpu的体系结构,还依赖于嵌入式系统板级设备的配置。对于2块不同的板子而言,即使他们使用的是相同的处理器,要想让运行在一块板子上...
2019-08-16 15:41:58
235
原创 u-boot移植详解-预备知识
一、预备知识 bootloader是系统上电后最初加载运行的代码。它提供了处理器上电复位后最开始需要执行的初始化代码。 在PC机上引导程序一般由BIOS开始执行,然后读取硬盘中位于MBR(Main Boot Record,主引导记录)中的Bootloader(例如LILO或GRUB),并进一步引导操作系统的启动。 然而在嵌入式系统中通常没有像BIOS那样的固件程序,因此整...
2019-08-16 15:31:14
144
原创 C语言printf()、sprintf()、vsprintf() 的区别与联系
C语言printf()、sprintf()、vsprintf()的区别与联系printf() 在控制台应用程序中最为常用,使用也很简单。其参数为格式化字符串。函数原型:printf(const char *format,[argument]);例如:int a=1,b=2;printf("a=%d,b=%d",a,b);输出:a=1,b=2sprintf() 用于将输出存到字...
2019-08-15 20:20:05
183
原创 如何看懂原理图
原理图分类1、GPIO(general peripheral input output)和门电路1.1 输入、输出引脚、上拉电阻、三极管1.2 与门、或门、非门上拉电阻结合三极管此时2440输出0,三极管不导通,输出1,三极管导通。此时如果在上拉电阻下面接个LED灯,另外一端接3.3v,当输出1时LED亮上拉电阻结合输入引脚如果按键不接上拉电阻,...
2019-08-15 20:14:26
12181
1
原创 ARM异常与中断处理
中断是ARM处理器提高工作效率的方法之一。Ⅰ、形象理解中断:假设有个大房间里面有小房间,婴儿正在睡觉,他的妈妈在外面看书。母亲怎么才能知道小孩醒?过一会打开一次房门,看婴儿是否睡醒,让后接着看书 一直等到婴儿发出声音以后再过去查看,期间都在读书 查询 while(1){ 1 read book(读书) 2 open door(开门) i...
2019-08-14 22:13:17
596
原创 走进仓库(内存)
前面写完代码后,直接送到车间就可以运行。ARM是流水线工作,内存只是存放代码的场所,那么CPU是如何跟内存打交道的呢?(计算机组成原理知识)组成原理很理论的描述了它们之间的关系。但是并没有针对ARM做分析。其实只需要搞懂下面几个问题:① 内存如何存放程序(摆放)② CPU如何访问内存(读写)Ⅰ、CPU与外设的藕断丝连芯片结构图:CPU不会直接与外设打交道,它只管发指令,...
2019-08-14 21:45:22
224
原创 人机交互(串口通信)
可以说除了LCD屏,串口应该是最好的交互工具了。先过一遍串口的基本通信原理。Ⅰ、协议:通信无非就是双方交换消息,双方要有共同的语言,这样你说什么我才能知道。另外还要有时序同步,你说的太快,我也听不清楚。Ⅱ、时序图平时串口发送线是高电平的,当要向串口发送消息时,拉低串口发送线(起始位),此时PC端发现RX接收线由高电平变为低电平,那么PC端就知道串口即将有数据发送。那么P...
2019-08-14 21:33:08
1595
原创 迟到的心脏(ARM时钟体系)
心脏作为处理器最重要的东西,没有心脏,那么一切将无从谈起。1、晶振玩过单片机对这个名词肯定不陌生,所有的MCU都是需要晶振来提供工作时钟的。ARM也不例外。s3c2440外接12MHZ晶振,这个因设备而异。一般在板子上有注明。这一章绝非仅仅谈晶振,而是要搞明白,soc利用晶振产生了哪些时钟,供芯片使用。2、ARM时钟体系还是从芯片手册里面找。有点复杂哈,哈哈哈!没事,...
2019-08-14 21:21:47
274
原创 动动手指(按键)
LED灯我们接触了管脚输出功能,有出就有入,这一章将利用管脚的输入功能来获取按键的输入值。进而控制LED灯的亮灭。依然是三步骤:看原理图 ----- 确定引脚连线 看芯片手册 ----- 确定引脚功能 写程序 ----- 完成功能开发1、按键输入按键采用轮询方式,也就是在死循环不断检测引脚电平。再LED C语言版本上开发。Ⅰ、看门狗这里先介绍一下看门狗,...
2019-08-14 21:12:22
261
原创 星星点灯(点亮LED灯)
2、再次点灯显然用汇编写代码比较困难,如何用C语言来点灯呢?先准备个栈,如何告知ARM栈从哪里开始呢?sp寄存器:这个存储器指定了栈的开始地址,这样就好办了!!!不过栈从哪里开始呢?还记得处理器有个内部SRAM,它的大小有4k,也就是4096byte。那我们就设置栈从4096开始往下增长吧。如果ldr sp,=4096,那就代表是从nand启动ldr sp,=0x4000...
2019-08-14 21:06:35
225
原创 星星点灯(点亮LED灯)
1、点亮LED灯学习单片机的第一件事就是点亮LED灯,学习ARM开发,也不例外,先拿LED来开刀我们如何开始呢?我们分为3步:看原理图 ----- 确定引脚连线 看芯片手册 ----- 确定引脚功能 写程序 ----- 完成功能开发以后每个裸板程序都是按照这个步骤来的。Ⅰ、打开原理图原理图需要看懂哪一些东西呢?对于LED灯,只需要知道点亮LED是高电平还是低电...
2019-08-14 21:04:02
1368
原创 嵌入式Linux开发基础知识
1、程序设计重要概念一个程序本质上都是由 bss段、data段、text段三个段组成。这三个小鬼,在裸机开发中非常重要。因为它们涉及到程序运行时内存大小的分配。
2019-08-14 20:57:25
585
原创 利用systick实现1s定时
滴答定时器简介:系统定时器SysTick是属于CM3内核中的一个外设,相关寄存器内嵌在NVIC中,所有基于CM3内核的单片机都具有这个系统定时器,这使得软件(OS)在CM3单片机可以十分容易的移植。SysTick一般用于操作系统的产生时基功能,以维持操作系统的“心跳”。问题描述:利用stm32自带的滴答定时器,也就是systick定时器,实现1s钟定时,滴答定时器10ms中断一次...
2019-08-14 09:06:36
2900
1
原创 485学习
一、简介半双工,多点通信的标准。它的电气特性和 RS-232 大不一样。用缆线两端的电压差值来表示传递信号。RS485 仅仅规定了接受端和发送端的电气特性。它没有规定或推荐任何数据协议。传输距离远, 支持节点多。 RS485 总线最长可以传输 1200m 以上(速率≤100Kbps)一般最大支持 32 个节点,如果使用特制的 485 芯片,可以达到 128 个或者 256 个节点,最大的可以支...
2019-08-13 16:23:57
768
原创 字符串转16进制
问题描述:通过串口接收到一串字符串"cacabcbc",要求按照16进制输出时也是"cacabcbc"。问题分析:这个问题乍一看,还不知道如何下手。其实很简单,就是对字符的ASCII码进行转换。例如:仔细分析可以得到一个字符与它本身相同的16进制数相差87,再仔细点看,可以发现其实就是差了一个‘a’再加上10。 ...
2019-08-13 16:15:05
13104
1
转载 二级指针的作用详解
欢迎转载,转载请注明原文地址:http://blog.csdn.net/majianfei1023/article/details/46629065一、概念在如下的A指向B、B指向C的指向关系中:首先C是"一段内容",比如你用malloc或者new分配了一块内存,然后塞进去"一段内容",那就是C了。C的起始地址是0x00000008...
2019-03-16 20:38:49
207
原创 实战篇之二:使用class_name定位多页信息
经过上一篇介绍,我们已经基本完成了我们的目标,但其中还存在很多问题: 1、页面时动态的,更新了当前Xpath路径就不再指向刚才的目标了 2、如何爬取整一页,爬取多页操作 通过本篇文章将进行一一解答上述存在的问题 首先来分析页面Xpath路径的特点,想要知道内在关系,只好一层一层剥开 先以两个利好的Xpath为例子进行比较Xpath路径:/html/body/d...
2018-06-21 15:30:51
1055
原创 实战篇之一:使用Xpath定位相关信息
上一篇我们已经配置好环境了,验证通过模拟浏览器访问选股宝网站并关闭浏览器,当然我们想要的是要得到选股宝相关的股票信息,比如抓取以下的股票信息:我想得到利好股票有哪一些 问题:怎么抓? 回答:先定位 问题:怎么定位? 回答:采用Xpath方式定位...
2018-06-20 09:11:31
298
原创 Python + Selenium 入门爬虫——环境介绍及搭建
为何突然间要写博客呢?答:为了完成期末Python作业,被逼的。哈哈哈哈!博客之旅从此开始1.1 为什么要学爬虫 举个例子:有一天你老板叫你去股市找出哪些股票会涨,what??? 我要是能够预测,我tm...... 作为员工,我们唯一的办法就是服从,可能这就是变相炒鱿鱼的理由吧,哈哈哈哈! 废话不多说,开始我们的搜索,首先打开选股宝网站(不是广告,捂脸) http...
2018-06-18 16:44:31
595
SD-Flasher工具烧写Superboot到SD卡
2018-11-15
乐迪AT9 2.4G 9通道遥控器中文说明书
2018-06-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人