01 2015 档案
摘要:3.5根文件系统的制作 根文件系统其实包含两个含义:1.是根。2.是文件系统。 根:就是第一个的意思。必须有的。 文件系统:就是我们在编译linux内核看到的: 上面的目录和文件就是文件系统的。 接下来我们就来创建文件系统: 创建目录: 1.2.创建设备文件: 这里我们需要下面文件: 1.3.加入配
阅读全文
摘要:3.4.嵌入式linux内核制作 前面我们已经制作了uboot,接下来是制作kernel。 首先进入内核源码,执行make distclean.清除先前编译产生的文件。 注意配置内核的时候多了一个ARCH=arm的条件。 回车之后会进入arm的配置菜单: 就像我们前面配置linux内核一样,我们也会
阅读全文
摘要:3.3.Uboot的使用 解压uboot的压缩包得到uboot的工程文件uboot,进入uboot,打开Makefile文件,搜索自己的开发板的类型。我的是OK6410 256的。 然后执行配置文件: 接着执行一下的命令进行编译: 编译完成的截图: 完成之后,我们会在我们的uboot的目录看待生成u
阅读全文
摘要:2.3NandFlash的操作 1.NandFlash分类: 2.MLC和SLC对比: 3.信号引脚: Nandflash的读: 页读:页地址 随机读:页地址+列地址 今天是要实现页读:需要页的地址。 我们来看芯片手册K9F2G08U0A.pdf:找到桉叶读的工作原理图: 寄存器NFCONT: 在这
阅读全文
摘要:2.2中断的深度剖析 中断生命周期: 中断源: 上面的中断的总数在2440是加上子中断的。在6410就全部列出的。 下面是过滤的过程分析: 中断处理 4.1:2440的中断处理: 4.2:中断处理在6410和210: 上面的:我在初始化中断控制器的时候,就要告诉中断控制器,当串口中断产生的时候,要跳
阅读全文
摘要:2.1MMU的知识 Loop.c的代码是: Loop.c的代码是: 最后两个程序的运行结果: 我们看到两个程序里的地址是一样的。这是怎么回事呢!? 这就是我们今天的重点:MMU内存管理单元。 MMU的作用:两个 上面是虚拟地址和物理地址的转化。 在上面的两个程序中,输出的都是虚拟地址,MMU会将虚拟
阅读全文
摘要:13.c和汇编的相互调用 新建light.c: 修改start.S: 修改Makefile:加light.o 最后make成功,烧写成功。 同样,我们也可以在C函数里调用我们的汇编里面的函数: 修改start.S:把light_led申明为global: 在light.c中被调用: Make编译烧写
阅读全文
摘要:12.bss段的初始化 在C代码:有初始化全局的数据段,局部的栈,malloc部分的堆,未初始化的全局的bss段。 从上面的编译的信息知道: Bss段的起始地址:0001052c Bss段的结束地址:00010534 我们的hello变量的地址:00010530是落在bss段里的地址的。所以是存在b
阅读全文
摘要:11.栈的初始化 1.栈的概念: 2.满/空栈: 1.3:升/降栈: 1.4.栈桢的理解: 局部变量是保存在栈中的: Stack.c: 编译和反汇编: 传递参数: Func1: 保存寄存器的值: Main: Func1: Func2:
阅读全文
摘要:9.内存的了解 内存由于具备访问速度快,访问方式简单等优点,成为了PC或者是嵌入式硬件平台上不可或缺的元件。在开始学习如何使用内存之前,非常有必要先了解一下内存的分类: 1.1内存分类: 1.2 DRAM分类 2.内存内部结构: 包括:表结构,L-Bank,寻址信息(包括L-Bank选择信号和行地址
阅读全文
摘要:8.时钟初始化 ARM系统时钟初始化: 这就需要知道什么是时钟脉冲信号,什么是时钟频率,什么是时钟源。 时钟脉冲信号: 时钟脉冲信号:按一定的电压幅度,一定的时间间隔连续发出的脉冲信号。时钟脉冲信号是时序逻辑的基础,它用于决定逻辑单元中的状态何时更新。数字芯片中众多的晶体管都工作在开关状态,它们的导
阅读全文
摘要:Linux的模块驱动 接下来写个最简单的驱动程序,就像程序语言的hello world程序。 首先是:hello.c的代码: 这是个最简单的驱动程序。就是打印hello的信息。驱动程序和我们的程序语言结果有点不大一样。驱动模块的入口是倒数第二行的module_init()的函数。驱动模块的出口是mo
阅读全文
摘要:Linux内核的配置和编译 之所以要对内核进行配置,这是很多都是硬件的需求,和软件的需求。就是选择自己需要的,去掉自己不要的。 配置内核的方法: make config:基于文本模式的交互式配置。 make menuconfig:基于文本模式的菜单型配置。 上面有两种配置方法,但是make conf
阅读全文
摘要:实验4-4:TCP客户端服务器 实验目的: 熟悉TCP客户端服务器编程 实验要求: 1、实现TCP客户端服务器回显程序 2、传输信息要求如下 (1)尝试用C语言结构去发送或接收一个信息包 (2)将服务器运行于开发板,客服端运行于ubuntu 12.04,抓包分析TCP协议 实验步骤: 1、服务器端
阅读全文
摘要:实验4-3:UDP客户端服务器 实验目的: 熟悉UDP客户端服务器编程 实验要求: 1、实现UDP客户端服务器回显程序 2、传输信息要求如下 (1)尝试用C语言结构去发送或接收一个信息包 (2)将服务器运行于开发板,客服端运行于ubuntu 12.04,抓包分析UDP协议 实验步骤: 服务端的程序:
阅读全文
摘要:实验4-2:fork父子进程 实验目的: 理解fork创建子进程的本质 实验要求: 1、按如下要求编写程序: (1)、打开一个有内容的文件; (2)、调用fork创建子进程; (3)、读文件的第一个字符输出打印出来; (4)、看看父进程和子进程分别读到的字符是什么 2、按如下要求编写程序: (1)、
阅读全文
摘要:实验4-1:文件拷贝 实验目的: 熟悉Linux系统IO编程 实验要求: 1、按照io.h给出的接口实现通用io操作接口 2、利用io操作接口完成mycpy文件拷贝工具: 通过重定向完成文件拷贝功能: ./mycpy < srcfile > desfile 实验步骤: 1、实验代码: #includ
阅读全文
摘要:实验3-3 移植Madplay到开发板 实验目的: 掌握嵌入式Linux开源项目的移植 实验要求: 1、准备Madplay开源项目需要的源文件: (1)、madplay-0.15.2b.tar.gz (2)、libmad-0.15.1b.tar.gz (3)、libid3tag-0.15.1v.ta
阅读全文
摘要:实验3-1 Makefile 实验目的: 学会Makefile编写方法。 实验要求: 1、准备项目工程; 2、为项目工程编写Makefile。 实验步骤: 1、将实现代码中的"1_原始工程"目录通过SMB共享拷贝到Linux上 2、进入工程目录,编写Makefile文件 3、Makefile文件内容
阅读全文
摘要:实验三 交叉工具链使用 实验目的 1、掌握交叉工具链的安装、配置方法 2、掌握交叉编译、调试方法 实验要求 安装、配置arm-linux交叉工具链 交叉编译"输入-回显"程序; 将程序"嵌入"到开发板运行; 实验步骤 一、安装、配置arm-linux交叉工具链 1、将教学资源\toochain目录内
阅读全文
摘要:实验二 嵌入式linux程序编译与调试 实验目的: 学会使用及配置vim 掌握gcc编译器使用 掌握使用Gdb单步调试程序的方法 实验要求: 熟悉使用该节所介绍的vim创建、编辑、保存文件。 分别用gcc实现预处理、编译、汇编、链接四个过程; 使用gcc编译多文件工程,并制作编译脚本。 利用Gdb单
阅读全文
摘要:Minicom 通信配置-linux环境 用串口线,usb转串口。一端链接实验箱,一端链接pc机。 查看端口号: Pc机:我的电脑----->右击----->选择管理---->选择设备管理器---->选择端口---->Prolific-USB-to-Serial Comm Port(COM1). 这
阅读全文
摘要:7.点亮led的操作 Led可以作为我调试程序的工具。 OK6410的核心板原理图:led的部分截图: 我们从上面的原理图知道,led1-4对应的是GPM0-3. 2.GPIO GPIO是General-Purpose Input/Output Ports:通用输入/输出端口。在嵌入式系统中,CPU
阅读全文
摘要:6、异常向量表的学习---设置SVC模式 这是手册的资料,我们看到,要设置svc模式,就是要把我们的cpsr的后五位设置为0b10011即可。Cpsr的结构: 接下来,我们就来把cpsr的后五位设置为0b10011. 设置的思路: 首先把这五位清零(bic指令),使用orr往这五位写入0b10011
阅读全文
摘要:4.协处理器访问指令 协处理器用于执行特定的处理任务,例如:数学计算用的协处理器可以控制数字处理,以减轻处理器的负担。ARM可支持多达16个协处理器,其中CP15是最重要的一个。 : 格式: 现在我们使用mrc指令读出cp15协处理器里的main ID: 根据上面的说明得: 运行结果: 读出来的值是
阅读全文
摘要:3.Arm机器码 首先汇编程序转化为机器码,才能在机器内运行。 首先我们对上面的裸机的代码中生的.elf文件进行反汇编: start.elf: file format elf32-littlearm Disassembly of section .text: 50008000 <_start>: .
阅读全文
摘要:2.汇编代码的简单实现 使用汇编的原因很简单,就是汇编代码的高效。在机器启动的时候,利用汇编的高效,对硬件进行初始化,为加载内核,提供条件。 目前常用的ARM汇编指令有两种: *ARM标准汇编:适用于ARM公司的汇编器,适合在Windows平台下使用。 *GNU汇编:使用与GNU交叉编译工具链中的汇
阅读全文
摘要:1.ARM寄存器简解 由ARM Architecture Reference Manual.pdf得信息: 31个通用寄存器,6个状态寄存器(一个cpsr,5个spsr)。 通用31个寄存器,被分为了三类:R0~R7,R8~R14,PC程序计数器(R15)。 R13常做堆栈指针的。 R14保存调用子
阅读全文
摘要:2.汇编代码的简单实现 使用汇编的原因很简单,就是汇编代码的高效。在机器启动的时候,利用汇编的高效,对硬件进行初始化,为加载内核,提供条件。 目前常用的ARM汇编指令有两种: *ARM标准汇编:适用于ARM公司的汇编器,适合在Windows平台下使用。 *GNU汇编:使用与GNU交叉编译工具链中的汇
阅读全文