一  嵌入式系统定义:

应用于特定环境的硬件体系。

二  两样非常重要的能力:

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学习笔记的更多相关文章

  1. 嵌入式Linux学习笔记之第一阶段---基础篇

    嵌入式Linux学习分五个阶段 第一阶段: 01嵌入式环境搭建初期 02C语言语法概述 03C语言内存操作 04c语言函数 05linux基础 06gun基础 第二阶段: 01-linux之io系统编 ...

  2. 嵌入式Linux学习笔记(三) 字符型设备驱动--LED的驱动开发

    在成功构建了一个能够运行在开发板平台的系统后,下一步就要正式开始应用的开发(这里前提是有一定的C语言基础,对ARM体系的软/硬件,这部分有疑问可能要参考其它教程),根据需求仔细分解任务,可以发现包含的 ...

  3. 嵌入式Linux学习笔记(六) 上位机QT界面实现和串口通讯实现

    目录 (1).参考资料 (2).QT界面布局实现 (3).数据和操作逻辑 在上一章我们实现了下位机的协议制定,并通过串口通讯工具完成了对设备内外设(LED)的状态修改,下面就要进行上位机软件的实现了( ...

  4. 嵌入式Linux学习笔记(0)基础命令。——Arvin

    学习记录: 到今天为止ARM裸机开发学习进程:1.2.1-1.2.14 预科班知识Linux介绍学习进程:0.2.1-0.2.6 学习内容笔记: 学习了Linux的开发方式的优劣介绍 学习了常用文件夹 ...

  5. 嵌入式Linux学习笔记 NAND Flash控制器

    一.NAND Flash介绍和NAND Flash控制器的使用 NAND Flash在嵌入式系统中的作用,相当于PC上的硬盘 常见的Flash有NOR Flash和NAND Flash,NOR Fla ...

  6. 韦东山嵌入式Linux学习笔记02--如何给开发板烧录程序

    购买韦东山嵌入式开发板jz2440 v3会标配两根usb线和一根网线,OpenJtag需要单独购买, 我暂时还没买到该工具. 下面介绍usb烧录以及通过网线烧录程序. 1.usb烧录程序: 借助DNW ...

  7. 嵌入式linux学习笔记1—内存管理MMU之虚拟地址到物理地址的转化

    一.内存管理基本知识 1.S3C2440最多会用到两级页表:以段的方式进行转换时只用到一级页表,以页的方式进行转换时用到两级页表.页的大小有三种:大页(64KB),小页(4KB),极小页(1KB).条 ...

  8. 嵌入式Linux学习笔记之第二阶段---文件I/O

    1.文件IO的四个函数 一些术语: 不带缓冲的I/O: 每个read和write都调用内核中的一个系统调用. 文件描述符: 一个非负整数,对内核而言,所以打开的文件都通过文件描述符引用. ①打开或创建 ...

  9. 韦东山嵌入式Linux学习笔记08--中断体系结构

    中断是什么? 举个栗子, 系统怎么知道你什么时候插入鼠标这个设备? 可以有两种处理方式: 1. 查询方式: 轮询去检测是否有设备插入; 2. 中断的方式 当鼠标插入这个事件发生时, 置位某个寄存器,告 ...

随机推荐

  1. CPU卡中T=0通讯协议的分析与实现

    IC卡的应用越来越广泛,从存储卡到逻辑加密卡,目前CPU卡已经逐渐在应用中占据主导地位.CPU卡根据通讯协议可分为两种:接触式和非接触式.接触式CPU卡主要采用两种通讯协议:T=0和T=1通讯协议.T ...

  2. netcat

    一.概述 netcat是网络工具中的瑞士军刀,它能通过TCP和UDP在网络中读写数据.通过与其他工具结合和重定向,你可以在脚本中以多种方式使用它.使用netcat命令所能完成的事情令人惊讶.netca ...

  3. Teach Yourself Scheme in Fixnum Days 6 recursion递归

    A procedure body can contain calls to other procedures, not least itself: (define factorial (lambda ...

  4. Putty server refused our key的解决方法

    在使用putty工具使用密钥远程登陆CentOS系统时,出现Putty server refused our key提示,解决办法: 1.查看是否关掉SELINUX. 相关命令:getenforce, ...

  5. oracle数据库 ORA-12560: 协议适配器错误

    ORA-12560:  协议适配器错误 造成ORA-12560: TNS: 协议适配器错误的问题的原因有三个: 1.监听服务没有起起来.windows平台个一如下操作:开始---程序---管理工具-- ...

  6. poj 2226 Muddy Fields(最小点覆盖+巧妙构图)

      Description Rain has pummeled the cows' field, a rectangular grid of R rows and C columns (1 <= ...

  7. git 拆库 切库 切分 子目录建库

    如果git库目录是这样的: git根目录 project_a/ project_b/ ... 并且想为project_a单独创建一个代码库 # 拉一个新分支 git co -b project_a_r ...

  8. javaweb中去除某个get方式的参数,并且返回路径

    String requestURL = request.getRequestURL() + ""; // String queryString = request.getQuery ...

  9. Stm32高级定时器(三)

    Stm32高级定时器(三) 1 互补输出和死区插入 1.1 死区:某个处于相对无效状态的时间或空间 本来OCX信号与OCXREF时序同相同步,OCXN信号与OCXREF时序反相同步.但为了安全考虑,以 ...

  10. 远程连接到Fedora

    首先执行以下3点(主要是前两点) 第一: 开启ssh #service sshd restart 第二:关闭防火墙 #service iptables stop 第三:selinux(重启电脑后失效) ...