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

这篇具有很好参考价值的文章主要介绍了在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.o
        arm-linux-gnueabi-ld -Ttext 0x50000000 -o led.elf $^
        arm-linux-gnueabi-objcopy -O binary led.elf led.bin
        arm-linux-gnueabi-objdump -D led.elf > led_elf.dis
%.o : %.S
        arm-linux-gnueabi-gcc -o $@ $< -c

%.o : %.c
        arm-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

在linux中进行arm交叉编译体验tiny6410裸机程序开发流程,开发,嵌入式,linux,arm开发,裸程序,Tiny6410,友善之臂,DNW

 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 = H43

CheckOneButton=No
Action=Null
OS= Linux

VerifyNandWrite=No

StatusType = 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 会闪烁,如果开发板有屏幕,会有如下显示:

在linux中进行arm交叉编译体验tiny6410裸机程序开发流程,开发,嵌入式,linux,arm开发,裸程序,Tiny6410,友善之臂,DNW

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

在linux中进行arm交叉编译体验tiny6410裸机程序开发流程,开发,嵌入式,linux,arm开发,裸程序,Tiny6410,友善之臂,DNW

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

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

在linux中进行arm交叉编译体验tiny6410裸机程序开发流程,开发,嵌入式,linux,arm开发,裸程序,Tiny6410,友善之臂,DNW

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

在linux中进行arm交叉编译体验tiny6410裸机程序开发流程,开发,嵌入式,linux,arm开发,裸程序,Tiny6410,友善之臂,DNW

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

关于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 设备驱动:

在linux中进行arm交叉编译体验tiny6410裸机程序开发流程,开发,嵌入式,linux,arm开发,裸程序,Tiny6410,友善之臂,DNW

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

在linux中进行arm交叉编译体验tiny6410裸机程序开发流程,开发,嵌入式,linux,arm开发,裸程序,Tiny6410,友善之臂,DNW

 在linux中进行arm交叉编译体验tiny6410裸机程序开发流程,开发,嵌入式,linux,arm开发,裸程序,Tiny6410,友善之臂,DNW

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

在linux中进行arm交叉编译体验tiny6410裸机程序开发流程,开发,嵌入式,linux,arm开发,裸程序,Tiny6410,友善之臂,DNW

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

 在linux中进行arm交叉编译体验tiny6410裸机程序开发流程,开发,嵌入式,linux,arm开发,裸程序,Tiny6410,友善之臂,DNW

在下面的安全警告窗口中点击“始终安装以驱动程序软件”,因为已经关闭了强制验证驱动签名,才有这个机会来安装没有签名的驱动程序,不然会直接告知驱动程序安装失败;在linux中进行arm交叉编译体验tiny6410裸机程序开发流程,开发,嵌入式,linux,arm开发,裸程序,Tiny6410,友善之臂,DNW

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

在linux中进行arm交叉编译体验tiny6410裸机程序开发流程,开发,嵌入式,linux,arm开发,裸程序,Tiny6410,友善之臂,DNW

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

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

在linux中进行arm交叉编译体验tiny6410裸机程序开发流程,开发,嵌入式,linux,arm开发,裸程序,Tiny6410,友善之臂,DNW

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

在linux中进行arm交叉编译体验tiny6410裸机程序开发流程,开发,嵌入式,linux,arm开发,裸程序,Tiny6410,友善之臂,DNW

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

在linux中进行arm交叉编译体验tiny6410裸机程序开发流程,开发,嵌入式,linux,arm开发,裸程序,Tiny6410,友善之臂,DNW

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

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

4. 结论

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

到了这里,关于在linux中进行arm交叉编译体验tiny6410裸机程序开发流程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【交叉编译环境】安装arm-linux交叉编译环境到虚拟机教程(简洁版本)

    就是看到了好些教程有些繁琐,我就写了一个 我这个解压安装的交叉编译环境是Linaro GCC的一个版本,可以用于在x86_64的主机上编译arm-linux-gnueabihf的目标代码 步骤来了 在你的Ubuntu系统中 创建一个目录 ,例如/usr/local/arm,然后将下载好的gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueab

    2024年02月03日
    浏览(42)
  • LuaJit交叉编译移植到ARM Linux

    Lua与LuaJit的主要区别在于LuaJIT是基于JIT(Just-In-Time)技术开发的,可以实现动态编译和执行代码,从而提高了程序的运行效率。而Lua是基于解释器技术开发的,不能像LuaJIT那样进行代码的即时编译和执行。因此,在运行速度方面,LuaJIT要比Lua快得多。此外,LuaJIT还支持更多的

    2024年02月05日
    浏览(42)
  • 使用CMake交叉编译Arm Linux程序

    注意,工具链文件的指定一定要紧跟cmake命令之后,不能放到 … 后面构建arm架构cmake 工程里新建一个文件叫arm_linux_setup.cmake arm_linux_setup.cmake内容如下

    2024年02月03日
    浏览(56)
  • ARM & Linux 基础学习 / 配置交叉编译工具链 / 编译 Linux 应用和驱动 / 编译内核

    编辑整理 by Staok。 本文部分内容摘自 “100ask imx6ull” 开发板的配套资料(如 百问网的《嵌入式Linux应用开发完全手册》,在 百问网 imx6ull pro 开发板 页面 中的《2.1 100ASK_IMX6ULL_PRO:开发板资料》或《2.2 全系列Linux教程:在线视频与配套资料》里面可以下载到),还有参考 菜

    2024年02月04日
    浏览(53)
  • Linux交叉编译opencv并移植ARM端

    Linux交叉编译opencv并移植ARM端 - 知乎 目标平台为arm7l,此为32位ARM架构,要安装合适的编译器 注意:64位ARM架构的编译器与32位ARM架构的编译器不能通用 opencv的交叉编译工具链在../opencv3.2.0/platforms/linux 路径下,linux文件夹下是一些.cmake文件,对应不同的移植对象,我需要在rv

    2024年02月12日
    浏览(46)
  • 基于Linux平台交叉编译 flutter arm64应用

        操作系统ubuntu 20.04,开发工具Android Studio + Flutter,运行平台RK3566 Linux。截止现在Flutter官方尚未正式对Linux arm64进行支持,仅有flutter-elinux可用。开发环境的搭建过程遇到了很多的坑,幸运的是最终完成了。为避免后来者再次浪费时间,特撰此文以飨读者。     本文仅记

    2024年02月06日
    浏览(81)
  • Linux安装配置ARM交叉编译器arm-linux-gnueabihf-gcc

    ARM交叉编译器是一种用于在一种架构(通常是x86或x86-64)上生成在另一种架构(如ARM)上运行的程序的工具。这种情况称为交叉编译,因为编译器和相关工具在不同的体系结构之间进行交叉工作。 主要用途如下: 嵌入式开发: ARM交叉编译器通常用于嵌入式系统开发,其中

    2024年02月01日
    浏览(42)
  • Ubuntu上搭建ARM Linux GCC交叉编译环境

    在Ubuntu操作系统上搭建ARM Linux GCC交叉编译环境是为了能够在x86架构的主机上编译运行适用于ARM架构的程序。本文将介绍详细的步骤以及相应的源代码。 安装必要的软件包 首先,我们需要安装一些必要的软件包,包括GCC、GNU Binutils和GDB。打开终端,运行以下命令来安装这些软

    2024年02月02日
    浏览(53)
  • Rust在linux下交叉编译到arm开发板

    前段时间做了rust交叉编译到arm开发板,如果引入的包有些包含OpenSSL,ring...遇见了很多问题在网上也查阅很多资料,今天抽个时间做个汇总吧。 虚拟机里面安装rust环境,做到交叉编译的时候应该都已经有了,这个地方就不过多说了,网上找一下就有的 首先描述一下我的环境

    2024年02月15日
    浏览(51)
  • QT配置arm-linux-g++交叉编译器

    ubuntu16.4版本虚拟机 qt5.12.9版本 ,qt-everywhere-src-5.12.9(版本要一致,没试过版本不同是否可行) (qt5.15.2 qt5.14.2都装了下,按照以下流程都是完全没错误) arm-linux-g++4.8.3版本 由于最近接手公司离职员工的代码,通常我个人都是直接写Makefile来完成,对方用的Qt配合交叉编译器

    2024年01月19日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包