[初级教程]搭建arm-linux裸机开发的环境

发布者:感恩的7号最新更新时间:2022-04-21 来源: eefocus关键字:arm-linux  裸机开发  环境 手机看文章 扫描二维码
随时随地手机看文章

1.前言

在上一遍的文章中,我介绍了如何设置芯片的启动模式,根据三星的官方主推的IROM模式,介绍了如何从IROM模式启动,并从Nand中加载我们的引导程序,有了一些前面的知识铺垫后,这一篇文章,我将进一步深入,教你如何实现你的引导程序,并搭建一个调试引导程序的实验环境。这里我介绍两种方式,这两种方式各有前提条件,具体如下:


2.开发环境的搭建

开发环境其实大同小异,总结一下用到的几个:


windows主机

vmware虚拟机

在vmware虚拟机中安装ubuntu桌面操作系统或者redhat或者debain或者centOS均可,看你自己习惯

调试工具(H-JTAG或者J-link)

H-JTAG和J-link的调试搭建环境不太一样,有区别,详细见下面


使用H-JTAG作为开发工具的


有H-jtag调试器USB接口的那种

准备H-JTAG软件用到的配置文件,以及驱动文件,如果H-JTAG的官方已经支持了你的nandflash或者Norflash,那么很幸运,你不需要去写这样的配置文件,如果你像我一样用的是H-JTAG的官方还没有支持的,那就得我们自己写配置文件和初始化脚本

拿我的开发板来说,我用iROM启动,从nand中加载引导程序,但我的nand型号是SPANSION公司的S34ML02G100TF100这款芯片,H-JTAG的官方还不支持我的s3c2416x+S34ML02G100TF100这样的板子,那我就得自己写这配置文件,也就是s3c2146+S34ML02G.hfc,不用担心,这种配置文件读一遍H-JTAG的官方文档就会写的。

使用H-JTAG软件,如果能正确识别出你的芯片和nandflash,能对nand芯片进行擦除和读写,那么接下来的部分,你就跳过了,不用看了。

使用J-link作为开发工具的


使用J-link的前提是你的开发板中已经有了一个引导程序,U-Boot或者自己写的bootstrap,不然不好调试。

假设你有U-Boot在你的开发板中,s3c2416的地址映射中有说SDRAM的地址是0x30000000,如果开启了MMU的,那么SDRAM的起始地址是0xC0000000,如果不懂为什么是0xC0000000,你可以百度百度。

假设你的U-Boot能正常引导,那么你想调试你自己的Bootstrap.bin的时候,用下面的命令就可以调试了

    tftp c0008000 bootstrap.bin

    go   c0008000


或者纯用J-link调试的命令


    h

    r

    speed 8000

    loadbin d:sharebootstrap.bin 0x30008000

    setpc 0x30008000

    g


3.如何为自己的芯片跟Nand写一份*.hfc配置文件?

就以我的主控s3c2416+nand(S34ML02G100TF100)为例,我的H-JTAG软件装在了C:Program Files (x86)H-JTAG,我要的写的配置文件就是放在该目录下的HFC Examples下面的,那么我们先从HFC Examples下找一个相似的,比如说s3c2416+K9F2G08.hfc,具体修改步骤如下:


拷贝一份s3c2416+K9F2G08.hfc,重命名成s3c2416+S34ML02G100TF100.hfc

打开s3c2416+S34ML02G100TF100.hfc,进入修改其中的参数,用记事本打开即可

下面是未修改前的s3c2416+K9F2G08的内容:


FLASH SECTION:

NAND-FLASH

S3C2416+K9F2G08

MEMORY SECTION:

08-BIT X 1-CHIP

0x0

0x30000000

XTAL SECTION:

NULL

TCK SECTION:

0

0

SCRIPT SECTION:

SoftReset+++

SetMem+32-Bit+0x53000000+0x00000000

SetMem+32-Bit+0x4A000008+0xFFFFFFFF

SetMem+32-Bit+0x4A000048+0xFFFFFFFF

SetMem+32-Bit+0x4A00001C+0x1FFFFFFF

SetMem+32-Bit+0x4A000004+0x00000000

SetMem+32-Bit+0x4A000044+0x00000000

SetMem+32-Bit+0x4C000024+0x00000225

SetMem+32-Bit+0x4C000000+0x00000E10

SetMem+32-Bit+0x4C000004+0x00000800

SetMem+32-Bit+0x4C000010+0x00640061

SetMem+32-Bit+0x4C000018+0x00200102

SetMem+32-Bit+0x4C00001C+0x00000000

SetMem+32-Bit+0x4C000020+0x00000051

SetMem+32-Bit+0x48000000+0x00049253

SetMem+32-Bit+0x48000004+0x44000050

SetMem+32-Bit+0x48000008+0x005D0035

SetMem+32-Bit+0x48000004+0xC4000051

SetMem+32-Bit+0x4800000C+0x80000032

SetMem+32-Bit+0x48000004+0xC4000053

SetMem+32-Bit+0x4800000C+0xC0000032

SetMem+32-Bit+0x48000004+0xC4000053

SetMem+32-Bit+0x4800000C+0x44000032

SetMem+32-Bit+0x48000004+0xC4000053

SetMem+32-Bit+0x4800000C+0x44000130

SetMem+32-Bit+0x48000004+0xC4000052

SetMem+32-Bit+0x48000004+0xC4000051

SetMem+32-Bit+0x48000010+0x00000020

SetMem+32-Bit+0x4800000C+0x44000030

SetMem+32-Bit+0x48000004+0xC4000052

Delay+++1

SetMem+32-Bit+0x4800000C+0x47800032

SetMem+32-Bit+0x48000004+0xC4000053

SetMem+32-Bit+0x4800000C+0x44000032

SetMem+32-Bit+0x48000004+0xC4000053

SetMem+32-Bit+0x48000010+0x0000040D

SetMem+32-Bit+0x48000004+0xC4000050

PGMOPTION SECTION:

ADDON SECTION:

NULL


下面说说怎么修改这文件


FLASH SECTION:

NAND-FLASH

S3C2416+K9F2G08 //这里是名称,改成S3C2416+S34ML02G100TF100

MEMORY SECTION:

08-BIT X 1-CHIP //我的开发板的硬件接线(指Nand)8bit,数量就一个

0x0             //这里填的地址是H-JTAG将把擦写或者编程Nand的驱动加载到哪里

0x30000000      //内存的地址,s3c2416的内存放在BANK6起始,物理地址是0x30000000

XTAL SECTION:

NULL            //可以不填,有些nand芯片驱动需要知道外接晶振的大小,但我们2416不需要

TCK SECTION:

0

0

//接下来这个区域可以要,可以不要,这里主要是初始化ARM的内存或者寄存器,这是一段脚本 

//命令格式:SetMem+地址位宽+寄存器或者内存地址+要设置的值

//比如说,第二行的SetMem+32-Bit+0x53000000+0x00000000意思是将0x53000000处设置成0x00000000

SCRIPT SECTION: 

SoftReset+++

SetMem+32-Bit+0x53000000+0x00000000

SetMem+32-Bit+0x4A000008+0xFFFFFFFF

SetMem+32-Bit+0x4A000048+0xFFFFFFFF

SetMem+32-Bit+0x4A00001C+0x1FFFFFFF

SetMem+32-Bit+0x4A000004+0x00000000

SetMem+32-Bit+0x4A000044+0x00000000

SetMem+32-Bit+0x4C000024+0x00000225

SetMem+32-Bit+0x4C000000+0x00000E10

SetMem+32-Bit+0x4C000004+0x00000800

SetMem+32-Bit+0x4C000010+0x00640061

SetMem+32-Bit+0x4C000018+0x00200102

SetMem+32-Bit+0x4C00001C+0x00000000

SetMem+32-Bit+0x4C000020+0x00000051

SetMem+32-Bit+0x48000000+0x00049253

SetMem+32-Bit+0x48000004+0x44000050

SetMem+32-Bit+0x48000008+0x005D0035

SetMem+32-Bit+0x48000004+0xC4000051

SetMem+32-Bit+0x4800000C+0x80000032

SetMem+32-Bit+0x48000004+0xC4000053

SetMem+32-Bit+0x4800000C+0xC0000032

SetMem+32-Bit+0x48000004+0xC4000053

SetMem+32-Bit+0x4800000C+0x44000032

SetMem+32-Bit+0x48000004+0xC4000053

SetMem+32-Bit+0x4800000C+0x44000130

SetMem+32-Bit+0x48000004+0xC4000052

SetMem+32-Bit+0x48000004+0xC4000051

SetMem+32-Bit+0x48000010+0x00000020

SetMem+32-Bit+0x4800000C+0x44000030

SetMem+32-Bit+0x48000004+0xC4000052

Delay+++1

SetMem+32-Bit+0x4800000C+0x47800032

SetMem+32-Bit+0x48000004+0xC4000053

SetMem+32-Bit+0x4800000C+0x44000032

SetMem+32-Bit+0x48000004+0xC4000053

SetMem+32-Bit+0x48000010+0x0000040D

SetMem+32-Bit+0x48000004+0xC4000050

PGMOPTION SECTION:

ADDON SECTION:

NULL


上面简单的介绍了一下如何去自己编写一个正确的.hfc文件,那么光有这个配置文件还是不够的,你还得有个相应驱动文件,这个文件应该放置在C:Program Files (x86)H-JTAGFDeviceNAND-FLASH下,是与你的.hfc文件相匹配的。


4.如何在~/…/H-JTAG/FDevice/NAND-FLASH下实现一个匹配的驱动?

在上一个小段中我们在C:Program Files (x86)HFC Examples下实现了一个s3c2416+S34ML02G100TF100.hfc文件,只有这个文件还无法让H-JTAG正确的识别我们的nandflash,我们还需要增加个描述性的文件,这个文件该放在C:Program Files (x86)H-JTAGFDeviceNAND-FLASH,同样的,在C:Program Files (x86)H-JTAGFDeviceNAND-FLASH下复制一份s3c2416+K9f2G08的描述文件,未修改的文件如下:


FLASH_TYPE=3

FLASH_SIZE=256M

FLASH_ID=0x00AA00EC

FLASH_ID2=0x00DA00EC

FLASH_ADDRESS=0x0

FLASH_NAND_DEVICE=(2048+64)x64PAGESx2048BLOCKS

FLASH_WIDTH=8/0/0

FLASH_DRIVER=1204/0/0


具体修改步骤如下:


将C:Program Files (x86)H-JTAGFDeviceNAND-FLASHs3c2416+K9f2G08的描述文件复制一份

重命名成C:Program Files (x86)H-JTAGFDeviceNAND-FLASHs3c2416+S34ML02G100TF100

文件名与我们之前的s3c2416+S34ML02G100TF100.hfc文件一致

修改s3c2416+S34ML02G100TF100这个文件

下面说说怎么修改


FLASH_TYPE=3  //这一行是nandflash的类型,3代表nandflash

FLASH_SIZE=256M //这是我的S34ML02G100TF100的存储容量,256MB

FLASH_ID=0x00DA0001 //这里是nandflash的芯片的ID,我的S34ML02G100TF100的ID应该是0x00DA0001,所以这里要修改一下

FLASH_ID2=0x000F000F //这里是nandflash的第二ID,有的nandflash会有个复用的名字或者叫别名,我的S34ML02G100TF100的这个地方值0x000f000f,所以修改一下

FLASH_ADDRESS=0x08000000 //我的开发板上的原理图接入的地方是BANK1,而BANK1的物理地址是0x08000000,所以,这里得改

FLASH_NAND_DEVICE=(2048+64)x64PAGESx2048BLOCKS//这里描述是nandflash的页、块、容量大小

FLASH_WIDTH=8/0/0  //这里是nandflash的接入位宽,我的开发板原理图是8位的IO模式,所以选这个

FLASH_DRIVER=1204/0/0 //这里是默认值,不用改


总结

经过上面的这几步骤的配置,至少应该是能完成这个arm-linux的逻辑开发环境,为接下来的全面裸机开发调试做准备。

关键字:arm-linux  裸机开发  环境 引用地址:[初级教程]搭建arm-linux裸机开发的环境

上一篇:[初级教程]samsung s3c2416x 的启动方式
下一篇:[初级教程]arm-linux裸机开发之-bootstrap.bin的实现

推荐阅读最新更新时间:2024-11-17 13:20

STM32 在 keil 环境下如何使用 cm_backtrace进行错误追踪
引言 我们在平常使用STM32单片机的时候,往往会碰到程序跑飞的情况,出现hard_fulat等错误,而我们在定位错误的时候,采用的方法往往是连上仿真器,一步一步单步调试,定位到具体的错误代码,再去猜测、排除、推敲错误原因,这样一个过程很是痛苦,而且在实际情况中,很多产品真机调试时必须断开仿真器或者说,问题确实存在,但是极难出现,所以在基于这样一个问题背景下,RTT 的大佬armink开发了一个基于 ARM Cortex-M系列的 MCU错误追踪库,用于帮助开发者解决上述问题。 CmBacktrace 的作用及适用平台 首先,CmBacktrace 是一款针对于 ARM Cortex-M 系列 MCU 的错误代码自动追踪、定位
[单片机]
STM32 在 keil <font color='red'>环境</font>下如何使用 cm_backtrace进行错误追踪
基于AT89S52单片机的太阳能环境参数测试仪设计
引 言   为了确保太阳能发电系统能够正常的工作,需要对太阳能发电系统的各项环境参数进行测量,从而有效地控制其运行。本文介绍了一种基于单片机的太阳能参数测试仪,提供了3种参数的测量功能和通信接口,以及2种供电方式,既可作为手持设备使用,又能安装在发电系统中,具有较高的实用价值。 1 硬件电路设计 1.1 总体结构   该测试仪以AT89S52单片机为核心,外接温湿度传感器SHTll、照度传感器TSL2561、四位共阴数码管、RS485总线通信接口以及显示切换按键。单片机上电工作后,对当前温度、湿度、光强度进行实时测量,通过按键切换将测得的3种参数通过LED数码管进行轮流显示;此外,还可以通过RS485总线与PC机进行通信,
[测试测量]
基于AT89S52单片机的太阳能<font color='red'>环境</font>参数测试仪设计
STM32F10x在环境下的开发过程
STM 32F10x在EWARM-EV-WEB-520环境下的开发过程 (利用H-JTAG SERVER) 一、首先下载ARM-based 32-bit MCU STM32F10xxx standard peripheral library stm32f10x_stdperiph_lib_v3.0.0.zip http://www.st.com/stonline/products/support/micro/files/stm32f10x_stdperiph_lib_v3.0.0.zip 二、建立STM32 LCCD工程 1.解压stm32f10x_stdperiph_lib_v3.0.0.zip软件包,把其中的 Lib
[单片机]
沃尔沃卡车引导更安全未来驾驶环境
  近期,与英国DHL货运公司及荷兰Nijhof-Wassink 运输公司合作的一项大规模安全调研项目正在积极展开,旨在于研究驾驶者在各种不同的交通状况下所表现出的驾驶行为,以及这些行为与卡车车载安全系统之间的相互关系。 用来拍摄驾驶员右脚踏板处活动的摄像机 面向前方行驶方向,从司机的视角进行拍摄的摄像机   EuroFOT(欧洲现场运行试验)是一项汇集了28个欧洲公司和组织的欧盟项目。该项目将针对卡车司机在日常工作中面临各种交通状况时所产生的行为,以及车载安全系统对其提供的辅助进行研究,这项工作需要通过对司机的实时拍摄以及对车辆信号(例如行驶速度)的记录来完成。本次研究将对英国DHL以及荷兰Nijhof-W
[汽车电子]
沃尔沃卡车引导更安全未来驾驶<font color='red'>环境</font>
LTC3630转换器应对汽车及工业环境的挑战
引言 汽车和工业系统的发展趋势是采用电子部件取代机械式的功能部件,因而导致其所采用的微控制器、信号处理器、传感器和其他电子器件的数量成倍增加。这里的问题是:24V车用电气系统和工业设备为电机和螺线管采用了相对较高的电压,而微控制器及其他的电子部件则需要低得多的电压。因此,存在着一种显而易见的需求,這就是需要从高输入电压产生非常低电压的紧凑型高效率降压转换器。 具一个可调输出低至800mV的65V输入、500mA DC/DC转换器 LTC3630是一款通用的突发模式(Burst Mode)同步降压型DC/DC转换器,其包括三种可通过引脚选择的预设输出电压。或者,也可以利用反馈电阻器将输出设定为低至800mV。可通过单个电阻器设定
[嵌入式]
如何设计车载能量测量系统促进环境保护
  随着技术的发展,能源需求越来越大,随着的能源的枯竭,能耗在诸多领域变得越来越重要,铁路行业也不例外。通过监测每辆列车的能量、费用清单,能够激推动铁路运营商优化能量使用效率。本文讲述了LEM的新型组件;这是首套符合最新暂行标准EN50463的可以实现能量监测和费用核算的系统。   汽车节能技术用于改进汽车能源消耗的技术。汽车节能措施涉及方方面面,就中国的现状而言,有效措施包括以下几个方面:公路与交通设施的合理配套,车型及油品按需生产配置,运营的合理等非技术问题。技术方面,保证产品质量,按照规范使用和维护机器,改变汽油机燃烧方式以提高能量转换效率。在现有的燃烧方式下,可以采取以下手段进行节能:改进供油系统,汽油机改气缸燃油喷射
[嵌入式]
智能照明控制器提供环境光测量与计时
为照明系统增加数字化管理 户外照明通常是由人工操作机械开关控制照明系统的打开或关闭。为了节省能源,您可能不希望整个晚上都在某个区域开启照明系统,这种情况下,如果能够精确地控制照明系统,在必要的时候自动打开或关闭照明系统,将会带来更多的便利条件。 利用控制器可以检测环境光强,天黑时打开照明灯并保持一定的时间间隔,然后在指定时间自动关闭照明灯。早上,则对该过程进行反向操作。如果预定时间内环境光强仍低于预设的照明门限,系统将打开照明灯。环境光足够亮时,系统将关闭照明灯。 利用环境光传感器(ALS)检测、测量环境光强,据此设计智能化照明控制器并不困难。由于控制器配备实时时钟(RTC),还可在规定的时间打开或关闭照明系统。本文介绍的管理系统可
[测试测量]
智能照明控制器提供<font color='red'>环境</font>光测量与计时
电磁流量计的安装环境选择及产品特点
一、电磁流量计传感器安装环境的选择 电磁流量计传感器外壳防护等级一般是IP65(国际GB4208外壳防护等级——防尘防碰水级),其安装场所的选择请参阅第五章第五节。安装环境的主要要求是: (1)传感器应安装在干燥通风的地方,避免潮湿、容易积水受淹的场所,还应尽量避免阳光直射和雨水直接淋浇。 (2)应尽可能避免安装在周围环境温度过高的地方。一体型结构的电磁流量计还受制于电子元器件环境温度,要低些。 (3)安装传感器的管道上应无较强的漏电流,应尽可能地远离有强电磁场的设备,如大机电、大变压器等,以免引起电磁场干扰; (4)安装传感器的管道或地面不应有强烈的震动,特别是一体型仪表; (5)安装传感器的地点要考虑工作人员现场维修的空间。
[测试测量]
电磁流量计的安装<font color='red'>环境</font>选择及产品特点

推荐帖子

问大家一个打印机的问题
公司打印机只有连接打印机的那台计算机(简称CA)能打印,办公室里其它计算机在CA刚开机不久或是重启后才能打印,过一段时间便不能打印了,而且打印机状态显示无连接,也无法从运行里访问CA的IP地址,右键点击在弹出的菜单中选中任何一项,都会提示“打印后台程序没有运行”,请问怎么回事,如何解决?问题补充:每台计算机的services.msc里进去computerbrowser,printspooler服务也已启动,自动状态。请大家在回答中标明是CA计算机还是其它计算机。谢谢!问大家一个打印机
tom_peng 嵌入式系统
Mega32A 18b20的驱动
使用环境:单片机MEGA32A晶振频率8Mhz此内容由EEWORLD论坛网友xutong原创,如需转载或用于商业用途需征得作者同意并注明出处Mega32A18b20的驱动
xutong Microchip MCU
全国电子设计竞赛A题交流群101126312
本帖最后由paulhyde于2014-9-1504:03编辑全国电子设计竞赛A题交流群101126312全国电子设计竞赛A题交流群101126312
fl540274997 电子竞赛
【Beetle ESP32 C6 Mini 】外设之 i2c 驱动HMC3588L
从BeetleESP32C6Mini引脚分布可知,I2C的外设包括一组I2C和一组低功耗I2C,SPI包括除了片选之外的一组SPI;对于管脚如下:SDA-GPIO19SCL-GPIO20手上有一款I2C接口的HMC3588L的模块;实物图像如下:HMC5883是霍尼韦尔公司生产的一款地磁场检测芯片是一款表面贴装的集成了信号处理电路的三轴磁性传感器,应用场景主要包括罗盘、导航、无人机、机器人和手持设备等一些
DavidZH RF/无线
请教GPIO设置问题
我现在用的是IXP420芯片,想对GPIO2进行读写操作,来控制LED灯。我向相应的寄存器设置了输出为1,并输出使能,但无法对LED灯进行操作。不知道遗漏了什么,GPIO模式要选择么,我在数据手册上没有找到,如何设置?请教GPIO设置问题你的无法对LED操作意思是LED不亮还是别的什么啊LED只要你把io口设置好,一般是低电平有效啊不知道这样说对你有帮助不我也是向他输入数据后,led不亮。我程序如下:GPOUTR|=0x00000004;/*设置输出值*/GPOER&=
ryg7 嵌入式系统
淘宝上怎么找不到ISL1206IBZ
请问高手,淘宝上怎么找不到ISL1206IBZ,这是一个EEPROM芯片,谢谢!淘宝上怎么找不到ISL1206IBZ是ISL12026吧,,,你少打个2.。。 谢谢,我弄错了
chenbingjy 51单片机
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多每日新闻

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved