08 2015 档案
摘要:bootloader通常会分为两个阶段:第一阶段采用汇编语言来编写,主要是一些核心的初始化工作(内存,时钟的初始化),第二阶段使用C语言来编写,主要是它会完成一些板载硬件的初始化(串口,网口)然后其启动我们的操作系统。所以我们需要先搭建好C语言环境。-------------------------...
阅读全文
摘要:为什么要搬移代码?如何搬移代码?arm启动流程回顾:2440:这里我们分析的是从nand flash 启动。2440的启动主要依赖于一个部件(SRAM),又名stepping stone.它的地址为0x0,nand flash是不能参与地址编址的,所以它是在内存以外的,当处理器上电以后,2440会自...
阅读全文
摘要:内存分类:DRAM:它的基本原件是小电容,电容可以在两个极板上保留电荷,但是需要定期的充电(刷新),否则数据会丢失。缺点:由于要定期刷新存储介质,存取速度慢。SRAM:静止存取功能的内存,不需要定期刷新电路就能保存它内部存储的数据,优点:存取速度快,缺点:功耗大,成本高。用于stepping sto...
阅读全文
摘要:ARM系统时钟初始化:时钟脉冲信号:按一定的电压幅度,一定的时间间隔连续发出的脉冲信号。它是时序逻辑的基础,用于决定逻辑单元中的状态更新,数字芯片中众多的晶体管都工作在开关状态,它们的导通和关断动作都是按照时钟信号来进行的。时钟脉冲频率:在单位时间(1s)内产生的脉冲个数。时钟源:1.晶振(晶体震荡...
阅读全文
摘要:点亮指路灯:学习四环节:led原理图分析,芯片手册导读,思维导图设计,为什么要使用led:通常led是作为程序调试的重要手段。led原理图:led实质为发光二极管,当其两端电压一定时,即处于导通状态。OK6410核心板原理图-256MDDR-2g p4页找到nled所对应的引脚分别为GPM1,GPM...
阅读全文
摘要:异常向量表:异常:因为内部或者外部的一些事件,导致处理器停下正在处理的工作,转而去处理这些发生的事件。ARM Architecture Reference Manual p54页。7种异常的类型:Reset异常:突然按下重启键。Undefined Instruction:未定义指令。()softwa...
阅读全文
摘要:bootloarder设计蓝图(不想做设计师的程序员不是好程序员):bootloarder的作用:将linux内核启动起来设计方法:模仿u-bootu-boot:支持多种嵌入式cpu的bootloarder程序,自主模式,自动引导内核启动。u-boot还有一种开发模式建立U-Boot工程:-----...
阅读全文
摘要:为什么要学汇编程序:在bootloard和linux内核的初始化中都要用到汇编程序。还有一个就是汇编程序的效率更高。-----------------------------------------arm汇编的分类:arm标准汇编(windows下ADS),GNU汇编(linux平台)。------...
阅读全文
摘要:前期工作:a.配置好tftp服务器:在嵌入式的童年中有介绍b.开发板可以pc,linux 三者可以互相ping通c.配置好nfs服务器:同样在嵌入式的童年中有介绍一.嵌入式linux内核的制作(这里使用的国嵌提供的linux-ok6410内核,附带内核配置文件config-file)a.进入内核目录...
阅读全文
摘要:基于ok6410:led驱动程序:vim led.c#include#include#include#include#include#include#include"led.h"#include#define GPMCON 0x7f008820#define GPMDAT 0x7f008824uns...
阅读全文
摘要:模拟一个虚拟寄存器设备驱动1.编写驱动#include #include #include #include #include int dev1_registers[5];int dev2_registers[5];struct cdev cdev; dev_t devno;/*文件打开函数*/in...
阅读全文
摘要:1.设备描述结构cdev驱动模型种类繁多,这就需要我从众多的模型中提取出他们的一些共性:a.驱动初始化a.1 分配设备描述结构a.2 初始化设备描述结构a.3 注册设备描述结构a.4 硬件初始化b.实现设备操作c.驱动注销---------------------------------------...
阅读全文
摘要:1.编译、安装驱动linux系统中,驱动程序通常采用内核模块的程序结构来进行编码,因此,编译、安装一个驱动程序,其实质就是编译、安装一个内核模块。将文件memdev.c makefile 放入虚拟机中,make 得到.ko文件cp .ko rootfs启动开发板 insmod *.ko2.创建设备文...
阅读全文
摘要:linux内核定时器度量时间差:时钟每隔一段时间就会产生一次中断,这是由系统的定时硬件以周期性的时间间隔产生,这个间隔由内核根据HZ来确定。每当时钟中断发生时,全局变量jiffies(unsigned long)就加1,因此jiffies(当前的时间点)记录了自linux启动后时钟中断发生的次数,驱...
阅读全文
摘要:linux内核链表:链表通常包括两个域:数据域和指针域。struct list_head{struct list_head *next,*prev;};include/linux/list.h中实现了一套精彩的链表数据结构。传统的链表指针指向下一个节点的头部。linux链表指针指向下一个指针list...
阅读全文
摘要:如实现一个简单的打印:printk1.cd linux-ok6410/kernel/vim printk.cvoid sys_pk(){printk("this is a new sys call");}cd arch/arm/kernel2.vim calls.S在最后面加上Call(sys_pk...
阅读全文
摘要:1.使用网线分别将 PC 机与开发板连接到交换机。2.保证 windows能 ping通 Linux。2.1.关闭 windows 系统中的其他网络连接,只保留用来和交换机连接的网卡。2.2.网络连接-》找到对应的网络-》右键属性-》tcp/ipv 4->设置该连接的 IP地址,如:设置为 192....
阅读全文