【转】嵌入式Linux学习笔记
一 嵌入式系统定义:
应用于特定环境的硬件体系。
二 两样非常重要的能力:
1. 掌握各种新概念的能力
2. 调试的能力( 包括软件, 硬件 )
三 需要的基础知识:
1. 操作系统理论基础
2. 数据结构
3. C,C++编程语言
4. 汇编语言
5. Linux基础能力
6. 单片机基础
四 结构框架:
1. bootloader( 作用:a. 初始化硬件 b. 引导操作系统 )
2. kernel
3. 文件系统
它们都置于flash中。
五 flash六大分区:
1. boot ---> 引导区
2. boot param ---> 引导参数区
3. my application ---> 用户程序区
4. kernel ---> 内核区
5. fs_yaffs ---> 文件系统区( 挂载文件时用 )
6. wince ---> 存放wince操作系统
一 ARM7 vs ARM9:
流水线 3级 5级
MMU 无 有
MMU和流水线级数非常的重要,它们是衡量一个芯片性能的重要参数。
二 ARM开发板上的接口:
1. 单片机类型接口:
串口,LED,按键,红外,温度传感器,蜂鸣器,I2C,SPI ... ...
2. 较高端接口:
LCD,CAMARA,IDE,USB,SD卡 ... ...
三 JTAG板:
1. 作用:
a. 对内部芯片进行读写控制。
b. 对外设进行间接控制。
c. 往板上的硬件烧录数据或程序。
2. 接口:
a. JTAG接口: 烧写接口( 请小心烧写bootloader,因为每次烧写都将擦除整个flash )
b. WIGGLE接口:调试接口( 需要搭配H-JTAG代理软件并使用软件AXD进行调试 )
四 开发板使用注意事项:
1. 使用前先去电( 用手摸一下各金手指部分即可 )。
2. 切记:除了网口,usb口,sd口之外的接口不可带电插拔。
一 方法一( 串口通讯 ):
1. 在PC开发端的linux环境中写好源代码。
2. 使用交叉编译器arm-linux-gcc编译之。
3. 用超级终端或者DNW建立ARM开发板与PC开发端的连接给ARM开发板上电,进入linux系统。
4. 再用上面两种通讯软件之一进行USB文件传输即可。
比起下面即将学习的方法,这种方法显得很笨,因为不利于调试。
二 方法二( 网络文件系统NFS步骤 ):
1. 在PC开发端的linux环境中写好源代码。
2. 在PC开发端的linux环境中使用交叉编译器arm-linux-gcc编译之。
3. 用超级终端或者DNW建立ARM开发板与PC开发端的连接并启动ARM开发板,进入linux系统。
4. 在ARM开发板的linux环境中执行命令" ifconfig eth0 192.168.0.11 "建立IP。
5. 在PC开发端的linux环境中执行命令" ifconfig eth0 192.168.0.22 up "建立IP。
6. 在PC开发端的linux环境中执行命令" service nfs restart "启动NFS服务器。
7. 在ARM开发板的linux环境中执行命令" ping 192.168.0.22 "建立和PC开发端的连接。
8. 在ARM开发板的linux环境中执行命令" mount -n nolock,rsize=1024,wsize=1024,timeo=15 192.168.0.22:/ /mnt
"即可将PC开发端的linux环境中的根目录挂载到ARM开发板的linux环境中的/mnt目录里。
9. 打开ARM开发板下的/mnt目录下就能看到并和PC共享那个根目录。
一 作用:
用之来编译生成bootloader或者裸机程序。
二 说明:
ADS其实就是Arm Develope Suite。主要由armcc, Code Warrior以及AXD组成。
armcc是编译器,Code Warrior是编辑控制器,AXD是调试器。
三 使用详细步骤:
已在实验中详细学习,可以参考:
四 一个实例ADS程序( 裸机程序 )分析:
该程序实现了让开发板的LED轮流闪烁,故称为跑马灯程序。
1. 汇编部分
2. C语言部分:
五 一般的ADS程序( 裸机程序 )设计步骤:
1. 由开发板原理图确定设备所在引脚。
2. 找到设备对应的寄存器编号。
3. 对控制器里面的寄存器进行写入,从而达到控制设备的目的。
一 两种重要的硬件:
它们的相关参数是衡量一个芯片性能的重要参考对象。维基百科里有更详细的介绍。
1. MMU:
定义:属于硬件范畴,能够将操作地址的虚址转换为实址。
2. cathe:
定义:属于硬件范畴,为了弥补CPU与内存的速度差而存在,对程序员透明。
二 ARM的工作模式:
1. 用户模式( USR ) ---> 运行应用程序的模式
2. 管理模式( SVC ) ---> 操作系统的保护模式
3. 中断模式( IRQ ) ---> 用于普通中断处理的模式
4. 快速中断模式( FIQ ) ---> 用于支持数据传输或通道处理的模式
5. 数据访问中断模式( ABT ) ---> 指令预取或读取数据错误时的模式
6. 系统模式( SYS ) ---> 特权模式
7. 未定义指令终止模式( UND ) ---> 执行了未定义的指令时进入
四 ARM的重要寄存器:
1. R13 ---> 栈指针寄存器
2. R14 ---> 子程序调用时保存PC指针的寄存器
3. R15 ---> PC指针寄存器( PC是记录下一条指令地址的寄存器 )
4. CPSR ---> 当前的程序状态字寄存器
5. SPSR ---> 保存程序状态字的寄存器
嵌入式Linux在这里是指跑在嵌入式计算机上的linux系统 ... ...
一 特点:
1. 自由 ( 代码开源,可自行修改 )
2. 稳定 ( 死机率非常低 )
二 版本识别技巧:
linux内核的版本号类似" 主版本号.次版本号.释出版本号 "。比如对于内核2.6.39来说,2是主版本号,6是次版本号,39是释出版本号。
如果主版本号或次版本号中有一个为奇数,那么这个内核还在测试中,很不稳定;反之,如果主版本号和次版本号都是偶数,那么这个
版本的内核就是稳定版本。释出版本号与内核是否稳定无关。
三 linux内核移植:
1. 定义:
是指对linux内核源码进行剪裁,使之能最大化的服务于特定硬件体系。
2. 剪裁过程:
a. 修改内核源码
b. 将内核源码重新编译
c. 把生成的内核映像文件拷贝到相应分区
3. 说明:
内核源码是基于C语言开发完成的。
四 linux内核重要目录:
1. /arch ---> 所有和体系结构相关的代码
2. /drivers ---> 各种驱动
3. /fs ---> 文件系统
4. /include ---> 编译核心时用的头文件
5. /init ---> 初始化系统所用的代码
6. /kernel ---> 进程调度代码
五 大致学习步骤:
初步体验linux -> 熟悉linux常用命令以及工具 -> linux应用程序开发 -> linux驱动程序开发 -> 熟悉kernel之后进入更加深层次的开发。
一 命令行模式:
定义:
使用全字符的界面进行开发。
特点:
占用的资源少,稳定。( 图形界面会占用许多资源,在很多种情况下带来不便 )
说明:
命令其实就是一个程序,参数就是传递给它的变量。
二 常用命令:
ls, cd, mkdir vi, gcc ... ...
至于如何移植,不属于这个系列视频的学习范畴 ... ...
一 编译步骤:
1. 获取linux内核源码( 已经移植好了的 )。
2. 解压。
3. 打开解压目录,修改makefile文件:
找到" CROSS_COMPILE ?= ...... "这行,将......部分替换为" 交叉编译器的目录下的bin目
录的路径 "
4. 执行命令" make menuconfig ",进一步对参数进行配置。( 比如可以选择需要安装的驱动模块
等 )
5. 执行命令" make zImage "。( 'I'确保大写 )
6. 编译完成之后,将在源码解压目录下的/arch目录下的/boot目录里产生一个新的zImage文件,将
它拷贝到开发板的kernel分区即可完成linux操作系统的下载。
一 方法一( 串口通讯 ):
1. 在PC开发端的linux环境中写好源代码。
2. 使用交叉编译器arm-linux-gcc编译之。
3. 用超级终端或者DNW建立ARM开发板与PC开发端的连接给ARM开发板上电,进入linux系统。
4. 再用上面两种通讯软件之一进行USB文件传输即可。
比起下面即将学习的方法,这种方法显得很笨,因为不利于调试。
二 方法二( 网络文件系统NFS步骤 ):
1. 在PC开发端的linux环境中写好源代码。
2. 在PC开发端的linux环境中使用交叉编译器arm-linux-gcc编译之。
3. 用超级终端或者DNW建立ARM开发板与PC开发端的连接并启动ARM开发板,进入linux系统。
4. 在ARM开发板的linux环境中执行命令" ifconfig eth0 192.168.0.11 "建立IP。
5. 在PC开发端的linux环境中执行命令" ifconfig eth0 192.168.0.22 up "建立IP。
6. 在PC开发端的linux环境中执行命令" service nfs restart "启动NFS服务器。
7. 在ARM开发板的linux环境中执行命令" ping 192.168.0.22 "建立和PC开发端的连接。
8. 在ARM开发板的linux环境中执行命令" mount -n nolock,rsize=1024,wsize=1024,timeo=15 192.168.0.22:/ /mnt
"即可将PC开发端的linux环境中的根目录挂载到ARM开发板的linux环境中的/mnt目录里。
9. 打开ARM开发板下的/mnt目录下就能看到并和PC共享那个根目录。
【转】嵌入式Linux学习笔记的更多相关文章
- 嵌入式Linux学习笔记之第一阶段---基础篇
嵌入式Linux学习分五个阶段 第一阶段: 01嵌入式环境搭建初期 02C语言语法概述 03C语言内存操作 04c语言函数 05linux基础 06gun基础 第二阶段: 01-linux之io系统编 ...
- 嵌入式Linux学习笔记(三) 字符型设备驱动--LED的驱动开发
在成功构建了一个能够运行在开发板平台的系统后,下一步就要正式开始应用的开发(这里前提是有一定的C语言基础,对ARM体系的软/硬件,这部分有疑问可能要参考其它教程),根据需求仔细分解任务,可以发现包含的 ...
- 嵌入式Linux学习笔记(六) 上位机QT界面实现和串口通讯实现
目录 (1).参考资料 (2).QT界面布局实现 (3).数据和操作逻辑 在上一章我们实现了下位机的协议制定,并通过串口通讯工具完成了对设备内外设(LED)的状态修改,下面就要进行上位机软件的实现了( ...
- 嵌入式Linux学习笔记(0)基础命令。——Arvin
学习记录: 到今天为止ARM裸机开发学习进程:1.2.1-1.2.14 预科班知识Linux介绍学习进程:0.2.1-0.2.6 学习内容笔记: 学习了Linux的开发方式的优劣介绍 学习了常用文件夹 ...
- 嵌入式Linux学习笔记 NAND Flash控制器
一.NAND Flash介绍和NAND Flash控制器的使用 NAND Flash在嵌入式系统中的作用,相当于PC上的硬盘 常见的Flash有NOR Flash和NAND Flash,NOR Fla ...
- 韦东山嵌入式Linux学习笔记02--如何给开发板烧录程序
购买韦东山嵌入式开发板jz2440 v3会标配两根usb线和一根网线,OpenJtag需要单独购买, 我暂时还没买到该工具. 下面介绍usb烧录以及通过网线烧录程序. 1.usb烧录程序: 借助DNW ...
- 嵌入式linux学习笔记1—内存管理MMU之虚拟地址到物理地址的转化
一.内存管理基本知识 1.S3C2440最多会用到两级页表:以段的方式进行转换时只用到一级页表,以页的方式进行转换时用到两级页表.页的大小有三种:大页(64KB),小页(4KB),极小页(1KB).条 ...
- 嵌入式Linux学习笔记之第二阶段---文件I/O
1.文件IO的四个函数 一些术语: 不带缓冲的I/O: 每个read和write都调用内核中的一个系统调用. 文件描述符: 一个非负整数,对内核而言,所以打开的文件都通过文件描述符引用. ①打开或创建 ...
- 韦东山嵌入式Linux学习笔记08--中断体系结构
中断是什么? 举个栗子, 系统怎么知道你什么时候插入鼠标这个设备? 可以有两种处理方式: 1. 查询方式: 轮询去检测是否有设备插入; 2. 中断的方式 当鼠标插入这个事件发生时, 置位某个寄存器,告 ...
随机推荐
- Chrome下的语音控制框架MyVoix.js使用篇(一)
日前因工作需求,着手研究了语音识别技术,发现github上有网友发布了一款叫做voix.js的javascript框架.在拜读voix.js的源码后发现了不少问题,于是自己写了一款语音识别框架MyVo ...
- 拉电流(source current)与灌电流(sink current)
对一个互补输出的驱动器而言,从输出端向外电路流出的负载电流称为拉电流(SOURCE CURRENT):从外电路流入输出端的负载电流称为灌电流(SINK CURRENT):在没有负载的情况下,驱动器本身 ...
- 从Lumia退役看为什么WP走向没落(从程序员与市场开发的角度,讲的真棒!)
http://www.cnblogs.com/zhangkai2237/p/4856880.html
- Linux sleep命令 和 wait命令
man sleep: SLEEP(1) User Commands SLEEP(1) NAME sleep - delay for a specified amount of time SYNOPSI ...
- 价格更低、SLA 更强的全新 Azure SQL 数据库服务等级将于 9 月正式发布
继上周公告之后,很高兴向大家宣布更多好消息,作为我们更广泛的数据平台的一部分, 我们将在 Azure 上提供丰富的在线数据服务.9 月,我们将针对 Azure SQL 数据库推出新的服务等级.Azur ...
- Linux企业级项目实践之网络爬虫(22)——编写爬虫系统服务控制脚本
需求:1.可通过 service spider start|stop|status|restart 命令对服务进行控制2.spider服务可开机自启动 start() { echo "sta ...
- 如何从Linux系统中获取带宽、流量网络数据
引入 国外的云主机厂商,例如AWS提供的网络数据是以流量为单位的,例如下面的图片: 从上图来看,其取值方式为 每隔5分钟取值1次,(每次)每个点显示为1分钟内的流量字节数(Bytes) 带宽与流量 我 ...
- 使用layer显示弹出框笔记
$.layer({ area : ['200px','auto'], //控制层宽高.当设置为auto时,意味着采用自适应, 当然,对于宽度,并不推荐这样做.例如:area : ['310px ...
- Ubuntu mysql安装,还有可视化界面
安装mysql sudo apt-get install mysql-server sudo apt-get install mysql-client sudo apt-get install lib ...
- hdu 5391 Zball in Tina Town(打表找规律)
问题描述 Tina Town 是一个善良友好的地方,这里的每一个人都互相关心. Tina有一个球,它的名字叫zball.zball很神奇,它会每天变大.在第一天的时候,它会变大11倍.在第二天的时候, ...