Mini2440上的第一个程序——点亮Led

手头的Mini2440搁置了两年半之后,我再次决定拿出它,重新尝试嵌入式Linux的学习。

我使用的是友善之臂的Mini2440开发板、韦东山的《嵌入式Linux应用开发完成手册》及其视频教程。所以,本篇文章中所涉及到的各种软件均可在以下两处找到:

  1. Mini2440开发板的配套光盘
  2. 韦东山JZ2440开发板的光盘

JZ2440是韦东山出品的开发板,作为《嵌入式Linux应用开发完全手册》的配套硬件,它和Mini2440相差无几,所以我这里用的是Mini2440。

一、目标

动手之前先确定好一个小目标——这一次,我们的目标是在Mini2440上点亮LED,怎么样,听起来很简单吧。
但是做起来,可并不是很简单喏,主要是因为会涉及到比较多的软件,下一节会对各软件做个大致的介绍,你只要知道各个软件是用来做什么的就可以了,先不必细究。

二、开发环境

硬件平台:Mini2440 (64M Nand flash)

软件编译平台:Ubuntu 9.10
以下是你接下来会依次接触到的软件或是工具:

  • vi或是vim: Linux下的文本编辑器,你可以把它想象成Windows下的记事本。我们会使用它来编写代码和Makefile文件。
  • Makefile: Makefile是一个文本文件,它里面的内容描述了如何根据源文件生成目标文件,即我们所需要的bin文件。在第2.2节会让你编写Makefile文件。
  • make: make是一个工具,它以Makefile作为其输入,根据Makefile内描述的规则,生成目标文件。
  • VMWare tools: VMWare tools是VMWare里面的一项工具,我们这里用它来实现Windows和Ubuntu虚拟机之间的文件共享,它在1.2节会提及。
  • Terminal: 终端。类似于Windows中的命令行,在2.3节我们会使用到它。
  • Jlink:Segger公司出品的仿真器,本文中我们仅用它来烧录Mini2440开发板上的Nor Flash。
  • supervivi: 友善之臂开发的类似于u-boot的程序,它通常被烧录至Mini2440开发板上的Nand Flash或是Nor Flash中。
  • dnw:与supervivi配合使用,完成向开发板下载程序的工具软件。

三、操作步骤

1. 搭建编译环境

1.1 VMWare与Ubuntu9.10 的下载与安装

下载JZ2440的配套光盘,光盘里面有VMWare和已经安装好编译工具链的Ubuntu。

下载完成之后安装VMWare,然后用VMWare打开Ubuntu。整个过程比较简单,网上有很多教程。

介绍一下大致的工作流程:

我们将Windows作为主机,在Windows上,我们可以通过VMWare访问虚拟机Ubuntu。而Ubuntu仅仅作为编译环境,其余的大部分操作还是在Windows上完成。使用Ubuntu的最终目的是生成可供下载至Mini2440的bin文件,然后在Windows上通过相应的工具将这个bin文件烧录至2440开发板。

那么,你可能要问了,这两个不同的操作系统之间,可以互相访问吗,生成的bin文件要如何在两者之间传递呢?

不着急,我们接下来就会来解决这个问题了。

1.2 在Windows与Ubuntu之间设置共享文件夹

接下来在主机(通常是Windows)与虚拟机(这里是Ubunbu)之间设置共享文件夹,主要是安装VMWare tools,这里不再赘述,网络上有相应的教程

刚才一口气做了这么多事,让我们先来休息一会儿,想一想我们都已经完成了哪些事了。

到现在为止,我们已经在Windows上安装好了VMWare,通过VMWAre我们可以使用Ubuntu系统,接下来,我们将在Ubuntu中编写点亮Led的代码,以及描述如何生成可供下载至Mini2440的bin文件。通过在1.2节设置的共享文件夹,在Windows上,我们可以取到这个bin文件,并通过相应的工具将它烧录至Mini2440。

2. 编写led程序和Makefile

2.1 通过vi输入led_on.s

你可能是头一次听说vi,还不知道如何使用。关于vim,网上也很大把的教程,同时,这里也有vi的视频教程。你只需要掌握几个简单的操作,例如如何新建文件,如何输入并保存文件即可。

在你学会使用vi后,请新建一个名为led_on.s的文件,它的内容如下:

.text
.global _start
_start:
    LDR R0,=0x56000010
    MOV R1,#0x00015400
    STR R1,[R0]

    LDR R0,=0x56000014
    MOV R1,#0x000000C0
    STR R1,[R0]
MAIN_LOOP:
    B   MAIN_LOOP

以上汇编代码主要做了两件事:

  1. 将位于0x56000010地址的GPBCON寄存器的内容写为0x00015400,什么意思呢?GPBCON寄存器是用来配置GPB的控制寄存器,通过它,可以分别指定GPB上每一位的功能——是作为输入引脚,或是作为输出引脚,抑或是其它的功能。

    通过查看Mini2440的原理图,我们可以看到,开发板上的4个led分别连接到了CPU(S3C2440)的GPB5/GPB6/GPB7和GPB8。

    所以,我们需要在GPBCON寄存器上,需要将GPB5/6/7/8配置为输出功能。

  2. 将位于0x56000014地址的GPBDAT寄存器的内容写为0x000000C0。GPBDAT寄存器是用来控制各个引脚上的电平的,是高电平1还是低电平0.

如果你仍然有些疑惑,那你可以看看这个视频教程的前半小时的内容。当然,对于这段代码的内容不太理解也没有关系,知道它大致做了些什么事情就可以啦!

2.2 通过vim输入Makefile

使用vi新建一个名为Makefile的文件,它的内容如下:

led_on.bin:led_on.s
    arm-linux-gcc -g -c -o led_on.o led_on.s
    arm-linux-ld -Ttext 0x00000000 -g led_on.o -o led_on_elf
    arm-linux-objcopy -O binary -S led_on_elf led_on.bin
clean:
    rm -f led_on.bin led_on_elf *.o

同样地,前面的视频教程也有对这个Makefile文件的讲解。

2.3 生成可执行文件led_on.bin

在Ubuntu中打开终端,cd至led_on.s和Makefile所在的目录,执行以下命令,生成led_on.bin。

make

至此,我们已经生成了将要下载到Mini2440开发板中的led_on.bin文件。

3 Mini2440的启动模式

Mini2440有两种启动模式,分别是从Nand Flash启动和从Nor Flash 启动,两种启动模式通过开关S2控制。

在 NAND Flash 启动模式下,上电之后,Nand Flash 最前面的4K 空间的内容会被拷贝至S3C2440 (Mini2440开发板上的主芯片)中的片内SRAM中,接着从SRAM的0地址处开始执行。

在 Nor Flash 启动模式下(非 Nand Flash 启动模式),Nor Flash 起始处就被映射为 0地址,接着从Nor Flash的0地址处开始执行。

在本文中,我们将使用Nor Flash模式启动,通过烧录至Nor Flash的Supervivi,将2.3生成的led_on.bin烧录至SDRAM处执行。

SDRAM 地址空间: 0x30000000 ~ 0x34000000

4 烧录supervivi至Nor Flash

4.1 判断Nor Flash中是否已经烧录supervivi

使用直连串口线连接Mini2440开发板的串口 0 和 PC 机的串口,在Windows上打开并设置好串口助手(115200,8N1),将Mini2440上的开关S2拨至Nor Flash启动模式,然后将开发板上电,如果串口助手上没有打印出以下内容,则需要根据4.2及其以后的步骤烧录supervivi至Nor Flash.

4.2通过JLink将supervivi烧录至Nor Flash

4.2.1 按照下图连接好Jlink

4.2.2 安装JFlash(配合JLink使用)

在Mini2440光盘里可以找到安装文件

4.2.3 通过JFlash烧录supervivi至Nor Flash

打开JFlash,依次打开Options->Project settings…,按照下图配置。

通过File->Open data file…导入supervivi-64M.bin(注意区分应该选64M还是128M的,我的Mini2440上的Nand Flash是64M的),地址填写0,表示bin文件将烧录至Nor Flash的0地址处。

依次选择Target->Auto,等待烧录完成。

4.2.4 在Windows上安装dnw

参照Mini2440用户手册的2.2.3节安装dnw

4.2.5 烧录led_on.bin至SDRAM并执行
4.2.5.1 打开dnw,依次选择Configuration,在Download Address处填写0x32000000,表示接下来的supervivi将被烧录至0x32000000,即SDRAM处。

4.2.5.2 开发板上电,串口助手将打印以下信息,输入d

4.2.5.3 在dnw中依次选择USB Port->Transmit/Restore,在弹出的窗口中选择led_on.bin,等待下载完成。


4.2.5.4 观察开发板上的LED。

4个Led中,Led1和Led4应该是被点亮,而Led2和Led3则是熄灭的。

至此,总算是把Led给点亮了,虽然整个过程有一些繁琐,但是并没有多大的难度,主要是涉及到比较多的工具软件,如果有哪个步骤卡住了,你可以先尝试在网络上搜索一下,如果自己无法解决,欢迎留言。

如果你看了这篇文章,觉得有一点点收获,那就给点打赏,给我更大的写作动力吧。

原文地址:https://www.cnblogs.com/outs/p/9315162.html

时间: 2024-08-02 06:35:45

Mini2440上的第一个程序——点亮Led的相关文章

STM32F407第一步之点亮LED

STM32F407第一步之点亮LED. 要点亮LED,首先了解一下F4的GPIO模块.首先看一下STM32F4数据手册,GPIO模块的内部结构图 看上去有点复杂,不要怕,慢慢理解就可以了.对外引脚那里二极管就是保护的作用.通过上.下拉对应的开关配置,控制引脚默认状态的电压,开启上拉的时候引脚电压为高电平,开启下拉的时候引脚电压为低电平,这样可以消除引脚不定状态的影响.但是这个不应该用来作为外部的上拉或下拉用,如按键的拉电阻不能用这个内部来作用,如果用可能会引起按键不稳定. GPIO 具有了“推挽

1.2.第一个实验——点亮LED灯

1.2.第一个实验--点亮LED灯 预备知识: (1)位.字节.IO端口.IO口 字节是内存管理的最小单位,一个字节是八位,每一位可以存放一个二进制位(0或者1).一个IO端口包括一组IO口,一般一组是八个,一个端口就是一组IO引脚.一个IO口对应一个二进制位,一个IO端口对应一个字节. (2)二进制和十六进制的转换 一个十六进制位等于四个二进制位,比如0xff对应二进制是1111 1111 实验目的:点亮八颗LED灯 实验过程分析: (1)八颗LED分别由八位二进制位来控制,二进制位是1时LE

日更第2期-2015-1-15-openFrameworks系列第一讲-手把手制作openFrameworks上的第一个程序!

恩,今天和朋友打球来着,于是今天的案例程序就做一个球吧!O(∩_∩)O哈哈~ 首先,没有看过上一篇教程的同学,还有还没有下载好VS和OpenFrameworks的同学,都去下一下. 传送地址:http://www.cnblogs.com/linongbo/p/4227552.html 那么,开始今天的日更啦! Hello OpenFrameworks! VS的安装部分我就不说了,不过我个人建议——默认是安装在C盘的,不过你要是手动改到别的盘上的话,C盘上 依然会有6G左右的内容.......Σ(

C语言第一个程序 “Hello,world!”

至于各种语法问题就不多说,该加逗号加逗号,该加括号加括号.大致就没什么问题 现在各类语言的第一个多半都是 输出"Hello,world!",原因大概就是Hello,world 是世界上大概第一个程序,用B语言写的,不仅仅代表这一串字符,更代表着我们从事计算机工作对代码世界(自己的世界)的一种向往.脑补一个画面,你对着新世界怀着无限憧憬与幻想的说出了"你好世界",那是真正爱好这个行业的人所应有的品质或者其他.废话不多说. C语言程序的入口只有一个 main() 函数.

bb_black_学习笔记——(3)点亮LED之shell命令

这次改变一下笔记的结构,直接上图.点亮LED永远是学习MCU,ARM,FPGA的入门例程,可以说是经典例程.这里笔者也从点亮LED开始开始ARM学习之旅. 接下来就开始点亮LED之旅,在开始之前需要向读者说明:本文作者也是一个ARM初学者,学习过程中也是在网上查找各种资料,最后总结于此.可以确定实验的过程中有好多地方笔者自己也是没有搞明白的,所以请读者原谅不能写的太透彻. 第一步:要点亮LED,首先需要了解GPIO的硬件位置,这样才能去操作相应的IO口,实现点灯目的 1.连接好bb-black之

起航,第一个程序——还是LED灯

如同学基本语言一样,helloworld是很多语言的第一个程序.在嵌入式开发中,点亮LED灯也是各种架构和开发板的第一个程序,其中很多东西是和单片机例如stm32是类似的,只是,现在我们没有了库函数,我们要自己完成一些东西. 先说启动文件,st官方已结给我们做好了,但是jz2440开发板没有统一的启动文件,需要自己编写,那么,基础的arm汇编就得有所熟悉,在之后的学习中,遇到一个指令就学习一个. (汇编)指令是CPU机器指令的助记符,经过编译后会得到一串1.0组成的机器码,可以由CPU读取执行.

U-BOOT第一阶段程序分析(1)

分析移植之前先介绍下我的软硬件环境: 开发板:JZ2440v2板 CPU   :ARM920T SOC   :S3C2440 晶振freq:12MHz NorFlash:2MB => Am29LV160DB NandFlash:256MB => K9F2G08U0A SDRAM:32MB X 2pieces => K4S561632H-T(U)C(16M X 16bit) U-BOOT版本:u-boot-1.1.6.tar.bz2 我移植的uboot是基于nand启动的,所以代码的分析过

java学习 之 第一个程序及认识

以前也看过一系列的java方面的程序,但是还没有正式敲过,今天正式学习并且正式敲出代码.在这里记录下来今日所得 写作工具:Notepad++ 在写作工具方面好多人建议用 记事本,但是我还是认为用 Notepad++ 这个编辑工具比较好. 这个相较于记事本来说,关键字可以编写,能够提高学习中的拼写错误提交效果: 再者,写好以后也要手动执行命令,更能够知道程序是怎么运行的. 第一个程序 public class HelloWorld { public static void main(String

java基础--JDK安装、环境变量配置、工具开发第一个程序、数据类型、运算符

**-----Java基础大纲-----**   **-----本章节-----** 1.Java语言的历史.特点及工作原理 2.JRE和JDK的介绍 3.Java运行环境和开发工具 4.Java基础语法 **-----下一章节-----** 5.条件语句 6.循环 7.数组 ============================================== 一:历史及开发准备 1.Java发展历程及来源 (1)发展历程 1996年1月,Sun公司发布了Java的第一个开发工具包(JD