在linux中进行arm交叉编译体验tiny6410裸机程序开发流程

在某鱼上找了一个友善之臂的Tiny6410开发板用来体验一下嵌入式开发。这次先体验一下裸机程序的开发流程,由于这个开发板比较老旧了,官方文档有很多过期的内容,所以记录一下整个过程。

1. 交叉编译器安装

按照光盘A中的文档《04- Tiny6410 Linux开发指南.pdf》的 1.3.5 节描述,用光盘中的 arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz 文件解压后运行命令 arm-linux-gcc -v 得到的结果是:

faund@faund-Virtual-Machine:/opt/FriendlyARM/toolschain/4.5.1/bin$ ./arm-linux-gcc
bash: ./arm-linux-gcc: No such file or directory
faund@faund-Virtual-Machine:/opt/FriendlyARM/toolschain/4.5.1/bin$ ./arm-none-linux-gnueabi-gcc
bash: ./arm-none-linux-gnueabi-gcc: No such file or directory
faund@faund-Virtual-Machine:/opt/FriendlyARM/toolschain/4.5.1/bin$ ./arm-none-linux-gnueabi-cpp
bash: ./arm-none-linux-gnueabi-cpp: No such file or directory
faund@faund-Virtual-Machine:/opt/FriendlyARM/toolschain/4.5.1/bin$ ./arm-none-linux-gnueabi-gcc
bash: ./arm-none-linux-gnueabi-gcc: No such file or directory
faund@faund-Virtual-Machine:/opt/FriendlyARM/toolschain/4.5.1/bin$ sudo ./arm-none-linux-gnueabi-gcc
[sudo] password for faund:           
sudo: unable to execute ./arm-none-linux-gnueabi-gcc: No such file or directory

原因应该是官方光盘使用的 Fedora 15 现在已经老旧,它使用的 Linux 内核 2.6.38 版本与我使用的 Linux mint 21.2 的 5.15.0 版本已经相差太远,其二进制可执行文件是不兼容的。

其实发行版中包含了 arm 的交叉编译器,使用下面的命令可以直接安装:

sudo apt install gcc-arm-linux-gnueabi

 安装完成之后,用 arm-linux-gnueabi-gcc -v 命令可输出如下所列内容的话,说明交叉编译器已经安装完成了。

faund@faund-Virtual-Machine:~$ arm-linux-gnueabi-gcc -v
Using built-in specs.
COLLECT_GCC=arm-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc-cross/arm-linux-gnueabi/11/lto-wrapper
Target: arm-linux-gnueabi
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.3.0-1ubuntu1~22.04.1' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libitm --disable-libquadmath --disable-libquadmath-support --enable-plugin --with-system-zlib --enable-libphobos-checking=release --without-target-system-zlib --enable-multiarch --disable-sjlj-exceptions --with-specs='%{mfloat-abi=hard:-march=armv7-a -mcpu=generic-armv7-a -mfloat-abi=hard}' --with-arch=armv5t --with-float=soft --disable-werror --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=arm-linux-gnueabi --program-prefix=arm-linux-gnueabi- --includedir=/usr/arm-linux-gnueabi/include --with-build-config=bootstrap-lto-lean --enable-link-serialization=2
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 11.3.0 (Ubuntu 11.3.0-1ubuntu1~22.04.1) 

2. 进行交叉编译

所谓交叉编译,就是在我们当前运行的 x86 架构电脑上的 Linux 中,为 arm 芯片编译二进制目标代码,这个目标代码包含了 arm 指令集的汇编代码。

按照官方DVD A的“/裸机程序/Linux平台下裸机程序开发指南”目录内《Linux平台下Tiny6410裸机程序开发指南.pdf》文件中第三节的说明对 1.led_s 例子进行交叉编译,由于使用了不同版本的交叉编译器,需要修改 Makefile ,使用新的交叉编译器中对应的命令。修改后的 Makefile 文件如下:

led.bin: start.oarm-linux-gnueabi-ld -Ttext 0x50000000 -o led.elf $^arm-linux-gnueabi-objcopy -O binary led.elf led.binarm-linux-gnueabi-objdump -D led.elf > led_elf.dis
%.o : %.Sarm-linux-gnueabi-gcc -o $@ $< -c%.o : %.carm-linux-gnueabi-gcc -o $@ $< -c clean:rm *.o *.elf *.bin *.dis  -rf

然后运行 make 命令,输出结果如下:

faund@faund-Virtual-Machine:~/embeddedDev/bareDev/code/1.leds_s$ make
arm-linux-gnueabi-gcc -o start.o start.S -c
arm-linux-gnueabi-ld -Ttext 0x50000000 -o led.elf start.o
arm-linux-gnueabi-objcopy -O binary led.elf led.bin
arm-linux-gnueabi-objdump -D led.elf > led_elf.dis

很顺利的,得到了我们需要的裸机程序 led.bin

 3. 烧写裸机程序到开发板上

《Linux平台下Tiny6410裸机程序开发指南.pdf》文件中第三节中已经说明有 2 种方式将 bin 文件烧写到开发板上,这里采用它推荐的直接下载到 DRAM 的方式。需要 2 个步骤: 1) 准备一个带有 USB 下载功能 Superboot 的 SD 卡,2) 将 bin 文件下载到 DRAM 中并运行。

3.1 制作带有 USB 下载功能的 Superboot SD卡

根据 DVD A 上的文档 《03- Tiny6410刷机指南.pdf》中的说明先把 Superboot-6410.bin 文件用 SD-Flasher.exe 程序烧写到 SD 卡中,所有程序和文件都在光盘中,注意,有的光盘镜像中 Superboot-6410.bin 文件是有问题的

我在烧写完成之后遇到了问题,从 SD 卡启动时,只显示 “Booting from SD”,等了10多分钟也没有后续输出,后来发现是光盘上的 Superboot-6410.bin 文件是有问题的,在友善之家的论坛中找到了一个文件,重新烧写后才能正常进入 Superboot。

如果遇到和我一样的问题,可以到下面这个链接去下载。

tiny6410从sd卡启动,总是Booting from SD| Linux技术交流区 - 友善之家 嵌入式开发板技术交流社区[size=2]如题,按照步骤来的,想从sd卡上按照bios, ..http://www.aiothome.net/read.php?tid-86547.html

做完上面步骤之后,参照《03- Tiny6410刷机指南.pdf》中 2.1.2 节说明,将光盘中的 images/FriendlyARM.ini 文件拷贝到 SD 卡中的 images 目录下,并且编辑 ini 文件,添加 USB-Mode = yes 项,我在接下来使用的文件内容如下:

#This line cannot be removed. by FriendlyARM(www.arm9.net)USB-Mode = yes
LCD-Type = H43CheckOneButton=No
Action=Null
OS= LinuxVerifyNandWrite=NoStatusType = Beeper| LED#################### Linux #####################
Linux-BootLoader = Superboot-6410.bin
Linux-Kernel = Linux/zImage
Linux-CommandLine = root=/dev/mtdblock2 rootfstype=yaffs2 init=/linuxrc console=ttySAC0,115200
Linux-RootFs-InstallImage = Linux/rootfs_qtopia_qt4.img
Linux-RootFs-RunImage = Linux/rootfs_qtopia_qt4.ext3################### Android ####################
Android-BootLoader = Superboot-6410.bin
Android-Kernel = Android/azImage
Android-CommandLine = root=/dev/mtdblock2 rootfstype=yaffs2 init=/linuxrc console=ttySAC0,115200 androidboot.console=s3c2410_serial0
Android-RootFs-InstallImage = Android/rootfs_android.img
Android-RootFs-RunImage = Android/rootfs_android.ext3################### WindowsCE6 #################
WindowsCE6-Bootloader= Superboot-6410.bin
WindowsCE6-BootLogo = WindowsCE6\bootlogo.bmp
WindowsCE6-InstallImage = WindowsCE6\NK-i.bin
WindowsCE6-RunImage = WindowsCE6\NK-i.bin#################### Ubuntu #####################
Ubuntu-BootLoader = Superboot-6410.bin
Ubuntu-Kernel = Ubuntu/uzImage
Ubuntu-CommandLine = root=ubi0:FriendlyARM-root ubi.mtd=2 rootfstype=ubifs  init=/linuxrc console=ttySAC0,115200
Ubuntu-RootFs-InstallImage = Ubuntu/rootfs_ubuntu-slc.ubi
Ubuntu-RootFs-RunImage = Ubuntu/rootfs_ubuntu.ext3############### UserBin #################
UserBin-Image=WindowsCE/NK-i.nb0
userBin-StartAddress=50100000

弄好的 SD 卡插到开发板上,启动模式开关拨到 SD-BOOT 位置。开发板和电脑的串口线、USB线都连接好然后开机,Superboot 正常启动的情况下 LED1 会闪烁,如果开发板有屏幕,会有如下显示:

 串口控制台输出的内容如下:

 3.2 把 led.bin 写入开发板的 DRAM 并运行

由于“年久失修”,官方 DVD 文档中提到的使用友善之臂提供的 MiniTools 应用进行烧写的办法似乎已经没办法用了。在windows下即使安装了 MiniTools 的驱动,也会一直是“Board is not connected”状态无法使用;Linux下因为需要 QT4 的支持,而目前的发行版普遍支持 QT5 以上版本了,我就没有照这个继续折腾了。还是回到官方的 DNW 软件来做本次体验,所以后面的做法并没有按照官方 DVD 的文档进行。

在开发板正常引导了 superboot 之后,因为已经用 USB 连接了电脑,所以电脑上出现了一个新的设备,但是在 windows 10 下,这个设备的驱动程序并没有自动安装好:

 原因是老旧的驱动没有签名,参考下面链接:

关于win10装不上dnw驱动的问题_新版dnw驱动解决win不兼容_陆少ye的博客-CSDN博客

【dnw驱动数字签名】解决Win10安装USB驱动时,"INF不包含数字签名信息"_aoxiang_ywj的博客-CSDN博客

 先要按照下面步骤关闭 windows 10 的强制验证驱动签名

1. “开始”菜单 ->“设置”->“更新和安全”->“恢复”里的“立即重启”;
2. 电脑这时候会重启,进入一个设置界面,等待出现新界面;
3. 新界面中选取“疑难解答”->“高级选项”->“启动设置”里点击“重启”;
4. 机器重启后就有一些选项了,第七个就是禁止验证驱动签名,按下数字键“7”就可以了,关闭驱动签名完成;

电脑启动后,到下面的地址下载 DNW 驱动程序:

win7-64位-DNW-USB驱动-FriendlyArm  tiny6410 已签名| Linux技术交流区 - 友善之家 嵌入式开发板技术交流社区[b][color=#ff0000][size=5][i] 折腾了几天,终于把 ..http://www.aiothome.net/read.php?tid-80424.html更新之前带有感叹号的 SEC S3C6400X Test B/D 设备驱动:

 选取浏览我的电脑以查找驱动程序:

 

 找到刚才下载的 DNW 驱动程序,inf 文件在 secbulk64.zip 包内的 secbulk64\inf64 目录中

选好了 secbulk.inf 文件之后,会出现下面显示,其中显示了 S3C2440 字样,不用管它,应该是通用的驱动,或者是社区驱动作者的笔误,直接点击下一步;

 

在下面的安全警告窗口中点击“始终安装以驱动程序软件”,因为已经关闭了强制验证驱动签名,才有这个机会来安装没有签名的驱动程序,不然会直接告知驱动程序安装失败;

 安装结束之后,驱动程序就出现在下图这个位置:

 到下面这个链接下载 DNW 软件:

DNW软件改进,添加了快捷按键,增强了界面显示等| 相关资料下载及使用技巧 - 友善之家 嵌入式开发板技术交流社区DNW软件改进,添加了快捷按键,增强了界面显示等http://www.aiothome.net/read.php?tid-3531.html运行这个 DNW 软件,注意到已经有显示“USB:OK”,说明已经与开发板 Superboot 正常连接了;

 在开发板的串口控制台中按 d 键,即命令开发板 “Download and Run an Absolute User Application”,下载并运行裸程序。

此时串口控制台显示正在等待 DNW 传输数据,在 DNW 软件上按 F7,然后选择之前交叉编译好的 led.bin 文件之后,DNW会显示数据传输用时,串口控制台会显示 “Download Done.” 等信息。

串口控制台显示“Run Absolute User Application...”,现在开发板已经在运行我们的裸机程序了,可以观察到开发板上 LED1 到 LED4 这 4 个 LED 灯一起在闪烁了,效果可以看下面的视频: 

友善之臂运行裸程序示例 led.bin

4. 结论

友善之臂的 Tiny6410 开发板虽然已经老旧了,官方很多支持也已经“年久失修”,但是在目前还是可以正常进行嵌入式的开发体验的,走通了裸机程序的各个环节之后,可以先进行裸机程序的深入研究,然后再慢慢可以去体验各种操作系统的嵌入式编程。

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

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

相关文章

快速开发框架若依的基础使用详解

Hi I’m Shendi 快速开发框架若依的基础使用详解 最近在为公司制作新的项目&#xff0c;经过了一段时间的技术沉淀&#xff0c;我开始尝试接触市面上用的比较多的快速开发框架&#xff0c;听的最多的当属若依吧 于是就选用了若依 介绍 为什么选&#xff1f;目的是为了提高开发…

Linux下.py文件只读问题以及解决过程

一、问题描述 如图&#xff0c;在Ubuntu Linux系统中使用pycharm管理项目文件时&#xff0c;无法编辑&#xff0c;提示文件为只读&#xff1a; 点击"OK"后仍旧无法清除只读模式&#xff0c;并报错&#xff1a; 二、问题解决 将问题定性为文件权限相关问题&#…

使用Three.js创建旋转的立方体

使用Three.js创建旋转的立方体 在本篇技术博客中&#xff0c;我们将介绍如何使用Three.js创建一个简单的场景&#xff0c;其中包含一个旋转的立方体。我们将学习如何设置场景、摄像机、立方体和渲染器&#xff0c;以及如何使用OrbitControls和gsap库来实现立方体的旋转动画和交…

VBA技术资料MF38:VBA_在Excel中隐藏公式

【分享成果&#xff0c;随喜正能量】佛祖也无能为力的四件事&#xff1a;第一&#xff0c;因果不可改&#xff0c;自因自果&#xff0c;别人是代替不了的&#xff1b;第二&#xff0c;智慧不可赐&#xff0c;任何人要开智慧&#xff0c;离不开自身的磨练&#xff1b;第三&#…

svn工具使用

svn 介绍 解决之道&#xff1a; SCM&#xff1a;软件配置管理 所谓的软件配置管理实际就是对软件源代码进行控制与管理 CVS&#xff1a;元老级产品 VSS&#xff1a;入门级产品 ClearCase&#xff1a;IBM 公司提供技术支持 SVN&#xff1a;主流产品 什么是SVN&#xff…

Diffusion扩散模型学习3——Stable Diffusion结构解析-以图像生成图像(图生图,img2img)为例

Diffusion扩散模型学习3——Stable Diffusion结构解析-以图像生成图像&#xff08;图生图&#xff0c;img2img&#xff09;为例 学习前言源码下载地址网络构建一、什么是Stable Diffusion&#xff08;SD&#xff09;二、Stable Diffusion的组成三、img2img生成流程1、输入图片编…

Kubernetes系列-Ingress

1 Ingress 概述 Kubernetes 对外暴露服务&#xff08;Service&#xff09;主要有两种方式&#xff1a;NodePort&#xff0c;LoadBalance&#xff0c;此外 externalIps 也可以使各类 service 对外提供服务&#xff0c;但是当集群服务很多的时候&#xff0c;NodePort方式最大的缺…

SpringBoot第28讲:SpringBoot集成MySQL - MyBatis-Plus方式

SpringBoot第28讲&#xff1a;SpringBoot集成MySQL - MyBatis-Plus方式 本文是SpringBoot第28讲&#xff0c;MyBatis-Plus&#xff08;简称 MP&#xff09;是一个 MyBatis的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。MyB…

Spring框架——IOC配置文件方式

Spring框架的概述和入门 目录 Spring框架的概述和入门 什么是Spring框架 Spring框架的特点 Spring框架的IOC核心功能快速入门 Spring框架中的工厂&#xff08;了解&#xff09; Spring 创建Bean对象的三种方式 Spring框架的Bean管理的配置文件方式 Spring框架中标签的配…

《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(16)-Fiddler如何充当第三者再识AutoResponder标签-上

1.简介 Fiddler充当第三者&#xff0c;主要是通过AutoResponder标签在客户端和服务端之间&#xff0c;Fiddler抓包&#xff0c;然后改包&#xff0c;最后发送。AutoResponder这个功能可以算的上是Fiddler最实用的功能&#xff0c;可以让我们修改服务器端返回的数据&#xff0c…

python面向对象

面向对象概述 python是一门面向对象语言&#xff0c;面向对象的三大特性&#xff0c;封装、继承、多态&#xff0c;python支持多继承&#xff0c;这里与java语言等还是有区别的 创建类关键字 class &#xff0c;类中包含属性和方法&#xff0c;通过类创建对象 python的类和对象…

组合模式——树形结构的处理

1、简介 1.1、概述 树形结构在软件中随处可见&#xff0c;例如操作系统中的目录结构、应用软件中的菜单、办公系统中的公司组织结构等。如何运用面向对象的方式来处理这种树形结构是组合模式需要解决的问题。组合模式通过一种巧妙的设计方案使得用户可以一致性地处理整个树形…

小目标检测(1)——大恒(DaHeng)相机操作与控制编程

文章目录 引言正文相关开发库的介绍编程准备配置引用头文件GalaxyIncludes.h配置lib文件 具体编程过程初始化和反初始化枚举设备开关设备 属性控制属性控制器种类 图像采集控制和图像处理采单帧回调采集图像处理流对象属性控制 获取设备事件获取掉线事件通知 样例程序分析补充&…

转机来了,国内全新芯片技术取得突破,关键驱动引擎开始提速

芯片技术转机来了 我们都知道&#xff0c;芯片技术是现代信息技术的基石&#xff0c;它驱动着计算机、智能手机、物联网设备等各类电子设备的运行。 科技的不断进步&#xff0c;芯片技术也在不断演进。 从传统的集成电路到现代的微处理器和系统芯片&#xff0c;其计算能力和能…

dubbo配置---重试与版本号

1、重试次数 失败自动切换&#xff0c;当出现失败&#xff0c;重试其它服务器&#xff0c;但重试会带来更长延迟。可通过 retries“2”{默认} 来设置重试次数(不含第一次)。 &#xff08;1&#xff09;在调用端&#xff0c;Reference注解添加属性 retries&#xff0c;设置重试…

Mysql5.8 Windows安装

1、下载安装包 MySQL :: Download MySQL Community Server 下载后解压到某个文件夹 2、配置环境变量 3.创建my.ini文件 [mysqld] # 设置3306端口 port3306 # 设置mysql的安装目录 basedirE:\\software\\mysql\\mysql-8.0.11-winx64 # 切记此处一定要用双斜杠\\&#xff0c;…

【CSS】圆形放大的hover效果

效果 index.html <!DOCTYPE html> <html><head><title> Document </title><link type"text/css" rel"styleSheet" href"index.css" /></head><body><div class"avatar"></…

Pytorch基础

文章目录 一、Pytorch简介二、安装2.1 安装GPU环境2.2 安装Pytorch2.3 测试 三、Tensor3.1 Tensor创建3.1.1 torch.tensor() && torch.tensor([])3.1.2 torch.randn && torch.randperm3.1.3 torch.range(begin,end,step)3.1.4 指定numpy 3.2 Tensor运算3.2.1 A…

113、单例Bean是单例模式吗?

单例Bean是单例模式吗? 通常来说,单例模式是指在一个JVM中,一个类只能构造出来一个对象,有很多方法来实现单例模式,比如懒汉模式,但是我们通常讲的单例模式有一个前提条件就是规定在一个JVM中,那如果要在两个JVM中保证单例呢?那可能就要用分布式锁这些技术,这里的重点…

iOS开发-实现热门话题标签tag显示控件

iOS开发-实现热门话题标签tag显示控件 话题标签tag显示非常常见&#xff0c;如选择你的兴趣&#xff0c;选择关注的群&#xff0c;超话&#xff0c;话题等等。 一、效果图 二、实现代码 由于显示的是在列表中&#xff0c;这里整体控件是放在UITableViewCell中的。 2.1 标签…