嵌入式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.  汇编部分       

嵌入式Linux学习笔记

       2.  C语言部分:

嵌入式Linux学习笔记

       

嵌入式Linux学习笔记

       

嵌入式Linux学习笔记



五 一般的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  ... ...

里所编译的核心是已经移植好了的核心,而不是直接从ww.kernel.org上直接下载得到的核心。

至于如何移植,不属于这个系列视频的学习范畴 ... ...

 一 编译步骤:

        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共享那个根目录。

转载于:https://www.cnblogs.com/lifan3a/articles/4161488.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359373.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java string 内存占用_JVM系列之:String,数组和集合类的内存占用大小

简介之前的文章中,我们使用JOL工具简单的分析过String,数组和集合类的内存占用情况,这里再做一次更详细的分析和介绍,希望大家后面再遇到OOM问题的时候不再抱头痛哭,而是可以有章可循,开始吧。数组先看下JOL的代码和输…

maven osgi_OSGi将Maven与Equinox结合使用

maven osgi很长时间以来,我一直在努力理解OSGi的真正含义。 它已经存在很长时间了,但是没有多少人意识到这一点。 它被炒作是一种非常复杂的技术。 这是我为所有Java开发人员简化的尝试。 简而言之, OSGi是一组规范,这些规范支持模…

python中、文件最重要的功能是( )和接收数据_Python基础语法14个知识点大串讲

来源:Python数据之道Python基础语法大串讲Python 是一门面向对象的编程语言,相信这篇文章对于初学者而言应该会有一个比较大的帮助,下面我们将 Python 中常用的基础语法和函数做了一个汇总,满满的干货,供大家学习。1、…

hadoop简单介绍_Hadoop:简单介绍

hadoop简单介绍什么是Hadoop: Hadoop是用Java编写的框架,用于在大型商品硬件群集上运行应用程序,并具有类似于Google File System和MapReduce的功能 。 HDFS是一个高度容错的分布式文件系统,与Hadoop一样,旨在部署在低…

java mvc 案例_springmvc经典案例

本想自己写一下总结,但是发现一篇好文,转发一下,日后自己再做补充;感谢Sunnier,引自:https://www.cnblogs.com/sunniest/p/4555801.htmlSpringMVC学习笔记----一、SpringMVC基础入门,创建一个He…

java泛型方法无参_从头再来:Java泛型(开发必须知道的)

Java泛型老规矩,测试一下,下面的程序能否正常运行?为什么?开头测试题泛型就是实现了参数化类型,也就是代码可以适用于多种类型。泛型是在编译期检查的,在编译期检查类型是否安全。我认为泛型最有用的就是和…

几种常见模式识别算法整理和总结

这学期选了门模式识别的课。发现最常见的一种情况就是,书上写的老师ppt上写的都看不懂,然后绕了一大圈去自己查资料理解,回头看看发现,Ah-ha,原来本质的原理那么简单,自己一開始仅仅只是被那些看似formidab…

fastd java下载_FastReport VCL报表控件

FastReport VCL报表控件是著名的 Delphi 打印控件。含全部源码。支持 Delphi 10.2 Tokyo,FastReport可以在大量的方式报表的创建过程中操纵对象。快速发展的报表和随后的打印,这样的优点,正如预览打印文档的外观。专业版除了报表标准版的功能…

#102030:在30天内运行20 10K来庆祝Java的20年

1995年5月23日是技术史上的重要时刻。 业界似乎并没有意识到当天发布的语言会在未来几年内完全改变技术的格局。 Java将在今年的同一天庆祝20岁生日。 Java 20年,哇! 回顾20年前的存储器时代,思考一下Java的发明时间/方式。 万维网专用于精…

View 的 android:visibility属性的讨论

Android VIEW 中的 visibility 属性,在API中的描述为:Controls the initial visibility of the view. [控制VIEW的初始可见性]。 其中包含三个参数: * 默认值为visible,可见。这里需要注意的是 "invisible" 和 "go…

JQuery-Dialog(弹出窗口,遮蔽窗口)

在Ajax中经常用到的弹出窗口和遮蔽窗口。自己写肯定是一个最佳方案,但时间和成本上,还是决定了寻找现成的吧。大概罗列一下。需要我满足我几个条件 一定要简洁方便拥有遮蔽功能,Model Dialog ,所谓的模态窗口可以根据HTML弹出窗口…

java调用接口实现的方法_java调用接口的实现方法

java调用接口的实现方法发布时间:2020-06-29 11:08:46来源:亿速云阅读:78作者:Leah本篇文章给大家分享的是有关java调用接口的实现方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇…

Java EE应用程序的单片到微服务重构

您是否曾经想过将现有的Java EE整体应用程序重构为基于微服务的应用程序需要做什么? 该博客解释了一个简单的购物车示例如何转换为基于微服务的应用程序,以及围绕它的一些担忧。 整体和基于微服务的应用程序的完整代码库位于: github.com/ar…

Java代码韦伯分布_第十五节、韦伯局部描述符(WLD,附源码)

纹理作为一种重要的视觉线索,是图像中普遍存在而又难以描述的特征,图像的纹理特征一般是指图像上地物重复排列造成的灰度值有规则的分布。纹理特征的关键在于纹理特征的提取方法。目前,用于纹理特征提取的方法有很多,最具有代表性…

JavaFX真实世界应用程序:欧洲电视网广播联盟

我荣幸地与今年在德累斯顿Saxonia 系统公司工作的Alexander Casall一起在JavaOne上展示了多个JavaFX Real-World应用程序。 在准备本次演讲时,我们向客户和合作伙伴发送了一份调查表,并向他们询问了一些与他们的项目,他们的应用程序以及他们对…

java 三大集合_java中的三大集合入门笔记(简单实用)

为什么使用集合框架如图:集合的好处:集合弥补了数组的缺陷,它比数组更灵活更实用,可大大提高软件的开发效率,而且不同的集合适用于不同的场合。Java集合主要分为以下3种类型Java集合框架提供了一套性能优良、使用方便的…

Java面试题2019简书_2019最新Spring面试题大全含答案之Spring Beans(2019最全Spring超级葵花宝典)...

1.什么是Spring beans?Spring beans 是那些形成Spring应用的主干的java对象。它们被Spring IOC容器初始化,装配,和管理。这些beans通过容器中配置的元数据创建。比如,以XML文件中 的形式定义。Spring 框架定义的beans都是单件bean…

使用此首选项可加快Eclipse m2e配置

谁不认识他们。 Eclipse中的旧式JFace对话框可以使您直观地看到实际上是一个相当简单的XML或属性文件。 对于m2e,它看起来像这样: 不幸的是,此屏幕的加载速度有点慢,除了检查版本号和您将永远不会更改的其他内容之外&#xff0c…

【百度地图API】发布静态图API啦!只需一个网址,即可展示定制百度地图!

【百度地图API】发布静态图API啦!只需一个网址,即可展示定制百度地图! 原文:【百度地图API】发布静态图API啦!只需一个网址,即可展示定制百度地图!摘要: 百度地图静态图API!您无须执…

脚本在流程中的性能影响

我们经常看到人们出于各种目的而使用脚本(例如,在服务任务,执行侦听器等中)。 使用脚本和Java逻辑通常很有意义: 它不需要打包到jar中并放在classpath上 它使流程定义更易于理解:无需查看其他文件 逻辑是…