热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于三星S3C2440的嵌入式Linux攻略

由于Linux操作系统内核具备可裁剪定制的特性,因而能够运行于ARM架构的嵌入式设备当中。伴随近几年,硬件性能的飞速提升以及价格的快速下降,RaspberryPi、NanoPi、R


由于 Linux 操作系统内核具备可裁剪定制的特性,因而能够运行于 ARM 架构的嵌入式设备当中。伴随近几年,硬件性能的飞速提升以及价格的快速下降, Raspberry PiNano PiRock PiOrange Pi 等可运行完整桌面 Linux 操作系统的卡片电脑大量涌现,通用计算机与嵌入式系统之间的界限愈来愈模糊。各个 IC 厂家不断提升 MCU 性能的同时,也推出了相应的公版外围电路、通用操作系统、驱动程序支持等一揽子完善的嵌入式技术解决方案,与笔者七年以前接触嵌入式技术伊始,早已经不可同日而语。



笔者手上这款 Mini2440 开发板于 2013 年购置,是由广州友善电子科技有限公司于 2010 年推出的 ARM9 开发板,虽然板载的三星 S3C2440 嵌入式微处理器已然廉颇老矣,且对应的 Linux 2.6.32.2 内核版本也早已壮士暮年。但由于最近涉及 Linux 嵌入式操作系统相关的工作,因此重新上电使用,同时以怀旧心态执笔撰写本文,用于记录一些心得体会,同时也作为日后备忘。


板载资源


软件资源



  • 嵌入式 Linux 系统内核版本为 Linux 2.6.32.2 ,可提供 Yaffs2CramfsEXT2FAT32NFS 文件系统支持。

  • 采用支持 MiniTools 与 SD 卡脱机烧写的 Superboot 作为 bootloader,代替三星原厂开源的 Supervivi

  • 交叉编译工具为遵循 EABI 标准的 arm-linux-gcc-4.4.3.tar.gz

  • 提供了 Python 脚本编程支持,可以直接对硬件进行访问。

  • 集成 Qt/Embedded 4.8.5 支持。


硬件资源


核心资源:



  • 微处理器采用 Samsung S3C2440A ,主频 400MHz 最高可达 533Mhz

  • 内存采用板载 64M 容量 32bit 位宽数据总线的 SDRAM ,时钟频率可达 100MHz

  • Flash 存储器分别采用了板载 256MNand Flash , 以及用于安装 BIOS 的板载 2M 容量 Nor Flash

  • 外接 3.5 英寸 240x320 分辨率的 LCD 电阻触摸显示屏。

  • 系统时钟源采用 12MHz 无源晶振。


外围 IO 接口:



  • 1 个采用 DM9000 网络芯片的 100M 以太网 RJ-45 接口。

  • 3 个 TTL 串行口,1 个 USB Host 和 1 个 USB Slave B 型接口。

  • 1 个 SD 卡 存储接口,1 个 PWM 控制的蜂鸣器。

  • 1 路立体声音频输出和 1 路麦克风输入接口。

  • 1 个 10pinJTAG 接口。

  • 4 个用户 LED 指示灯,以及 6 个带引出座的用户按键。

  • 1 个用于 A/D 模数转换测试的可调电阻。

  • 1 个用于 I²C 总线读写测试的串行 EEPROM 芯片 AT24C08

  • 1 个 20 pin 针摄像头接口。

  • 采用 5V 供电的电源,并板载实时时钟电池。

  • 1 个 34pinGPIO 接口,以及 1 个 40pin 系统总线接口。

  • 采用专业复位芯片 MAX811 实现微处理器所需的低电平复位。


串口终端设置


通过串口连接到开发板进行调试,是嵌入式开发中较为基本的一项工作。由于现代计算机基本不再配置物理串口,因此需要通过专业芯片将 USB 转换为串口,目前市场上较为常见的 USB 转串口芯片有英国 FTDI Chip 飞特蒂亚FT232 、台湾 Prolific 旺玖科技PL2303 、江苏 沁恒CH34X ,这里推荐使用板载 FT232 芯片的 USB 转串口线,从而获得高速稳定的通信质量,以及兼容性更加良好的驱动程序支持。更为重要的是,避免出现最新版本 Windows 10 操作系统中由于驱动程序签名错误,导致的 USB 转串口线无法正常工作的问题。


当 USB 转串口驱动程序安装成功之后,将线缆从电脑 USB 接口连接至开发板串口,然后首先了解一下串口通信相关的参数配置:



  1. 波特率 Speed(bps) :115200

  2. 数据位 Data bits :8

  3. 停止位 Stop bits :1

  4. 奇偶校验 Parity: None

  5. 数据流控制 Flow Control: None


然后在电脑上启动 串口调试工具 ,Winodws 操作系统上可以选择功能强大的 MobaXterm ,Linux 环境下则可以选择使用小巧的 Minicom ,下面我们分别对两者的安装和使用进行总结:


MobaXterm


点击主界面的【New session】,然后选择【Serial】串口模式,输入上面提到的串口通信配置数据:



点击确定保存配置,将 S2 开关 切换至【Nand Flash】启动模式,上电运行之后可以看到开发板 Bootloader 以及 Kernel 以及各种 Driver 加载的日志信息:




Superboot-2440 V1.5(20150414) by FriendlyARM
Booting from NAND
Load Kernel...
Uncompressing Linux...................................................................................................................................................... done, booting the kernel.
Linux version 2.6.32.2-FriendlyARM (root@tzs-ThinkPad-X201) (gcc version 4.4.3 (ctng-1.6.1) ) #16 Tue Dec 23 15:08:43 CST 2014
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
CPU: VIVT data cache, VIVT instruction cache
Machine: FriendlyARM Mini2440 development board
... ... ... ... ...



启动完成后便进入开发板的命令行界面,输入 Linux 命令查看开发板的一些基本信息:



Minicom




Superboot-2440 V1.5(20150414) by FriendlyARM
Booting from NOR
Try to find SD card...... not found.
Hello USB Loop
USB Mode: Connected



Superboot


早期 Mini2440 开发板出厂时预置的 Bootloader 是由友善之臂基于三星原厂 Vivi 改进而来的 Supervivi ,需要结合三星配套的 DNW 软件才能实现 USB 下载( 官方版本运行在 Win10 上时驱动已经失效 )。2014 年以后,友善之臂为 Mini2440 重新开发了一款称为 Superboot 的 Bootloader,并在同期推出 MiniTools 作为匹配的 USB 下载工具,该工具无需串口完全通过 USB 下载,并且内置相应的 USB 下载驱动,除了能够进行 Bootloader、Kernel、根文件系统的下载以外,还能够下载并安装 裸机程序 。由于 Superboot 必须与 MiniTools 配套使用,而笔者 Mini2440 开发板购置年限较早,因此需要手动通过 J-Link 仿真调试器将 Superboot 下载至开发板上的 2M 容量 Nor Flash ,下面来介绍 Bootloader 的具体烧写步骤:


首先在电脑上安装 JLink_Windows_V644d.exe 工具,然后将 Mini2440 开发板断电,并将 JLink 通过转接板和排线连接至开发板 JTAG 接口,另一头插入电脑 USB 接口。



Mini2440 开发板上电之后,在电脑上双击运行 J-Link Commander注意弹出的 JLINK 固件更新提示信息,为了防止 JLINK 固件失效这里选择【否】 ,运行后软件控制台界面输出如下信息表示 J-Link 已经成功连接至电脑:




SEGGER J-Link Commander V6.44d (Compiled Mar 27 2019 17:09:10)
DLL version V6.44d, compiled Mar 27 2019 17:08:23
Connecting to J-Link via USB...O.K.
Firmware: J-Link ARM V8 compiled May 27 2009 17:31:22
Hardware version: V8.00
S/N: -1
License(s): RDI,FlashDL,FlashBP,JFlash,GDBFULL
VTref=0.000V
Type "connect" to establish a target connection, '?' for help



开发板将 S2 开关切换至【Nor Flash】,并打开电源开关让开发板上电,接下来打开 J-Flash 并加载 s3c2440a_embedclub.jflash 配置文件,然后点击【Start J-Flash】进入软件主界面:



选择主界面菜单上的【Options】里的【Project settings…】,进入到项目配置界面后选择【Flash】选项卡。



点击【Select flash device】按钮,然后选中当前 Mini2440 开发板用于装载 BootloaderNor Flash 芯片型号。笔者当前 Mini2440 开发板使用的型号是 S29AL016J70TFI02 ,实物照片如下图:



所以这里直接选择 S29AL016Jxxxxxxx2 并点击【OK】以及【确定】保存。



接下来,选择 J-Link Commander 菜单项【Target】下的【connect】命令,使 J-Link 连接至 Mini2440 开发板。



再选择菜单项【File】下的【Open data file…】选中开发板光盘 images 目录内的 Superboot2440.bin 映像文件( 注意这里仅支持 .bin 后缀名格式, 所以如果下载 supervivi-64M 就需要添加 .bin 作为后缀名 )。此时会弹出下载起始地址对话框,直接输入 0 以后点击【确定】即可:



进行到这一步时,所有的前期配置工作都已经完成,点击 J-Flash 菜单【Target】里的【Production Programming】开始烧写 Bootloader



下面界面展示编程过程正在进行当中,万众期待的魔法即将发生:



J-Flash 界面弹出下图信息的时候,表示 Bootloader 已经成功的写入到 Mini2440 开发板的 Nor Flash 当中。



点击【确定】, J-Link 断电然后关闭 J-Flash ,开发板重新上电后开始正常工作。


完成【Superboot】的烧写之后,就可以通过 Mini2440 开发板上的 SD 卡插槽来完成操作系统的安装,首先将 SD 卡格式化为 FAT32 格式,然后将开发盘光盘中的 images 目录完全拷贝至 SD 卡,并修改好里面 FriendlyARM.ini 配置文件为当前开发板适用的选项,将 S2 开关 切换至【Nor Flash】一侧,重新上电后蜂鸣器发出一声 即开始安装操作系统,完成安装之后蜂鸣器将会发出 滴滴 两声,此时将 S2 开关 切换至【Nand Flash】重新上电即可启动操作系统。


MiniTools


将友善电子提供的 Superboot 下载到开发板 Nor Flash 中之后,接下来着手 USB 下载工具 MiniTools 的安装,由于该软件内置的 USB 驱动程序未获得 Windows 10 操作系统驱动签名,因此直接在 Windows 10 环境下安装会提示错误信息。此时,需要通过手动临时关闭 Windows 10 操作系统的 驱动程序强制签名 验证服务。


点击 Windows 10 右下角通知图标,选择【所有设置】-【更新和安全】-【恢复】-【立即重新启动】;此时操作系统会讯问重启选项,选择【疑难解答】-【高级选项】-【启动设置】-【重启】;此时重新启动并进入启动设置选项,选择【7) 禁用驱动程序强制签名】;进行到这里,重新进入 Windows 10 操作系统后就可以正常安装 MiniTools 了。另外一种更新简单的方法是以管理员身份运行 CMD 命令提示符工具 ,然后执行 bcdedit.exe /set nointegritychecks off 命令就可以关闭强制签名验证,如果需要恢复验证执行 bcdedit.exe /set nointegritychecks on 即可。


接下来,在个人电脑上打开 MiniTools 软件,然后用数据线连接开发板的 USB Slave 和个人电脑上的标准 USB ,并将 S2 开关 拨至【Nor Flash】一侧,上电启动后就可以看到开发板成功与 MiniTools 建立连接:



Linux 版本 MiniTools 采用静态编译,基本能够兼容大部分发行版,解压后以 root 权限执行 ./start.sh 命令即可正常运行。


通过 USB 下载操作系统


点击 MiniTools 界面上的【Linux】选项,并点击【Location images path】按钮,选择 Mini2440 开发板配套光盘下的 images 目录, MiniTools 会自动加载该目录下 FriendlyARM.ini 文件中的配置信息并自动填写至软件界面,注意配置文件中的 Linux-Kernel 项目需要设置为包含有对应液晶屏型号驱动的 Linux 内核,笔者当前开发板液晶屏型号为 X35 ,因此将配置文件修改为 zImage_X35 ,就像下面这样:




#This line cannot be removed. by FriendlyARM(www.arm9.net)
USBMode = No
Action = Install
OS = Linux
VerifyNandWrite = Yes
LowFormat = No
Status Type = Beeper| LED
# Linux part
Linux-BootLoader = Superboot2440.bin
Linux-Kernel = Linux/zImage_X35
Linux-CommandLine = noinitrd root=/dev/mtdblock3 init=/linuxrc cOnsole=ttySAC0
Linux-RootFs-InstallImage = Linux/rootfs_qtopia_qt4.img
# Windows CE 6 part
WindowsCE6-Bootloader = wince6/nboot_X35.bin
WindowsCE6-BootLogo = wince6/bootlogo.bmp
WindowsCE6-InstallImage = wince6/NK_X35.bin
#User Bin part
UserBin-Bootloader = Superboot2440.bin
UserBin-Image = 2440test/2440test_X35.bin
userBinStartAddress=30000000



点击【Start flashing】按钮即可开始通过 USB 下载相关的镜像文件。



使用 MiniTools 工具烧写操作系统时,需要确保 SD 卡里 images/FriendlyARM.ini 配置文件的 USB-Mode = yes ,或者使用前就先拨出 SD 卡。


使用 USB 下载裸机程序


友善电子提供了一系列无需运行在嵌入式操作系统之上的裸机测试程序,它们都保存在 2440test_X35.bin 这个文件下,需要通过 MiniTools 通过 USB 下载并运行在开发板上。


连接开发板的串口与 USB Salve 到计算机,并打开 MobaXterm 串口终端工具,将 S2 开关 切换至【Nor Flash】上电启动,打开 MiniTools 选择【User bin(No OS)】菜单,点击【Download and Run】按钮:



下载完成后, MobaXterm 串口终端将呈现如下提示信息,此时通过键入指定序号即可执行相应的裸机程序,按下键盘【Esc】键即可退出执行:




Superboot-2440 V1.5(20150414) by FriendlyARM
Booting from NOR
Try to find SD card...... not found.
Hello USB Loop
USB Mode: Connected
Downloading User-Bin...
Downloading User-Bin succeed
Run UserBin▒
Superboot-2440 V1.5(20150414) by FriendlyARM
Booting from NOR
<***********************************************>
SBC2440 Test Program VER1.0
www.arm9.net
Build time is: Jul 01 2012 13:05:28
Image$$RO$$Base = 0x30000000
Image$$RO$$Limit = 0x30034c4c
Image$$RW$$Base = 0x30034c4c
Image$$RW$$Limit = 0x300e2a10
Image$$ZI$$Base = 0x3009623c
Image$$ZI$$Limit = 0x300e2a10
<***********************************************>
Please select function :
0 : Please input 1-16 to select test
1 : Test PWM
2 : RTC time display
3 : Test ADC
4 : Test interrupt and key scan
5 : Test Touchpanel
6 : Test TFT-LCD or VGA1024x768 module
7 : Test IIC EEPROM, if use QQ2440, please remove the LCD
8 : UDA1341 play music
9 : Test SD Card
10 : Test CMOS Camera
11 : Test 1-wire LCD backlight control





推荐阅读
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 这是一个愚蠢的问题,但我只是对此感到好奇.假设我在Pythonshell,我有一些我查询的数据库对象.我做:db.query(的queryString)该查询在0xffdf842c ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • 本文介绍了在win7电脑上进行文件加密的方法,包括利用NTFS的EFS进行加密和使用Win7旗舰版的Bitlocker加密整个分区。同时推荐了超级加密3000、宏杰加密工具和超级盘加密工具等多种加密软件,这些软件具有快速的加密速度和高强度的加密功能,可以防止文件的删除、复制和移动。此外,还强调了保持加密密钥的重要性,以免重装系统后无法打开已加密的文件。最后,提醒读者选择绿色软件,方便使用。 ... [详细]
  • EPPlus绘制刻度线的方法及示例代码
    本文介绍了使用EPPlus绘制刻度线的方法,并提供了示例代码。通过ExcelPackage类和List对象,可以实现在Excel中绘制刻度线的功能。具体的方法和示例代码在文章中进行了详细的介绍和演示。 ... [详细]
  • STM32 IO口模拟串口通讯
    转自:http:ziye334.blog.163.comblogstatic224306191201452833850647前阵子,调项目时需要用到低波 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了Arction客户案例——LightningChart被集成到BodeAnalyzerSuite中!相关的知识,希望对你有一定的参考价值。 ... [详细]
author-avatar
深圳陶笛_512
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有