tag 标签: linux

相关帖子
相关博文
  • 热度 3
    2020-5-2 17:43
    1519 次阅读|
    2 个评论
    【MYC-C8MMX物联网开发板】+ Hello Android!!!
    上期测试遇到了一些问题,我重新买了个新的USB摄像头,想测试一下是否可以,接下来看一看。 新买的USB摄像头。 插上摄像头,输入lsusb,依然是能够找打硬件的,如图。 打开chees,依然是无法发现设备,很郁闷。什么问题不必深究,毕竟时不我待,测评还要继续哦。 go,go,go转战android,按照广泛体验说明,要把板子烧成android的步骤我们先要准备一根microUSB线。 然后准备好镜像,并且解压完毕。 管理员方式打开cmd,进入到android_p9.0.0_2.3.0-ga_image_myd-c8mmx目录下输入命令uuu_imx_android_flash.bat-fimx8mm-ddr4-a-e-c7。 然后插上microusb即可进入到adb烧录模式了,很遗憾,我的电脑居然报错了,烧录失败了。 怎么回事,倒推上去看一看,原来是USB驱动问题。 查了一下,NXP UUU模式更新镜像,win7用户是要更新一下USB驱动的,很幸运,我是win7,又学习到了新知识。 https://community.nxp.com/docs/DOC-342719 这个网址有简单教程,也可以下载uuu.pdf系统的看一看,教程说了win10无需更新驱动的,言下之意,win7自己看着办吧。 去指定的驱动网址,下载zadig2.5,下载完成后安装。 安装成功后,按照之前烧录的步骤再来一次,就会开始烧录了,如图。 烧录成功,长出一口气。 忘记了烧录过程要把boot模式改一改老规矩了。 把boot模式改回eMMC启动模式,等待一会,android开始启动。 开机画面居然还有小企鹅,咳咳。 这才是开机画面,大大大的android。 ok等待一会就进入到了待机面,没有触屏,接上鼠标一样用,按住左键一拉就进入到了主界面了。 接下来连接一下wifi。 搜索并输入密码,ok很顺利连接上了,硬件是好的。 登陆一下百度测试一下。 最后献上板卡的美照,别流口水。 好了android测评暂时先到这里。 声明:转载请经过本人同意,图片版权归个人和面包板以及米尔科技共同所有。
  • 热度 1
    2019-10-21 11:05
    918 次阅读|
    1 个评论
    By Toradex 秦海 1). 简介 随着 Python 在互联网人工智能领域的流行,大家也慢慢感受到 Python 开发的便利,本文就基于嵌入式 ARM 平台,介绍使用 Python 配合 PyQT5 模块来开发图形化应用程序。 本文所演示的 ARM 平台来自于 Toradex 基于 NXP iMX6 ARM 处理器的 Apalis iMX6 ARM 嵌入式平台。 2. 准备 a). Apalis iMX6Q ARM 核心版配合 Apalis Evaluation Board 载板 ,连接调试串口 UART1 (载板 X29 )到开发主机方便调试。更多关于 Apalis iMX6 配合 Apalis Evaluation Board 载板的说明请参考 Datasheet 和 开发上手指南 。 b). Apalis iMX6Q 默认的 Linux BSP 是不包含 Python , QT 等支持的,需要重新编译。 ./ 基于 Toradex Linux BSP release V2.8 ./ 参考 这里 搭建 Openembedded 编译环境,然后适配下面 patch ,用于使本文测试需要的 libsoc 适配 Python3 。 https://github.com/simonqin09/libsoc-examples/blob/master/python/0005-libsoc-python3-support.patch ./ 修改 build/conf/local.conf 文件,增加需要的组件 -------------------------- #IMAGE_INSTALL_append = " python3 python3-pip python3-libsoc python3-pyqt5 rng-tools " -------------------------- ./ 适配下面 patch ,在标准 image bb 文件中增加 QT5 的支持 https://github.com/simonqin09/libsoc-examples/blob/master/python/0003-angstrom-qt5-lxde-image.patch ./ 重新编译 image -------------------------- $ bitbake -k angstrom-qt5-lxde-image -------------------------- ./ 新生成的 image 位于 deploy/images/apalis-imx6/ 目录,参考 这里 的说明更新到 Apalis iMX6 模块上面 3). Python GPIO 中断测试程序 a). 首先我们先不包含图形界面,单独通过 Python 来完成简单的 GPIO 中断测试程序,本程序通过调用 libsoc 来完成 GPIO 控制,关于 libsoc 的使用和说明请参考 这里 。 b). Apalis Evaluation Board 载板硬件连接配置如下, X4 GPIO05(MXM3_11) 对应系统中的 GPIO 号码是 170 ,作为按键输入使用; X4 GPIO06(MXM3_13) 对应系统中的 GPIO 号码是 169 ,作为输出驱动 LED 使用。 X4 GPIO05 X34 SW5 X4 GPIO06 X34 LED1 c). 源代码请参考如下,分别实现了阻塞模式和非阻塞模式中断相应,实现功能就是按键交替点亮和关闭 LED 灯。 ./ 阻塞模式 – https://github.com/simonqin09/libsoc-examples/blob/master/python/gpiotest_block.py // main 函数作为主函数,实现打开 GPIOs ,同时设定初始化状态为高电平输出; test_interrupt_handler 函数实现中断相应,采用 gpio_in.wait_for_interrupt 为阻塞式中断,捕获中断才会继续进行,捕获中断后做了简单的防误触处理。 ./ 非阻塞模式 – https://github.com/simonqin09/libsoc-examples/blob/master/python/gpiotest_nonblock.py // main 函数作为主函数,实现打开 GPIOs ,同时设定初始化状态为高电平输出;另外,在 main 函数里面采用 gpio_in.start_interrupt_handler 来使能中断相应,为非阻塞式;在 main 函数最后通过 while 来接收键盘输入实现退出应用; gpio_in.wait_for_interrupt 依然作为中断处理函数相应中断并驱动 LED 状态改变。 d). 将 Python 代码直接复制到 Apalis iMX6 上面测试运行结果如下: ./ 阻塞模式下,最后是通过 Ctrl-C 强制退出程序 ----------------------- root@apalis-imx6:~# ./gpiotest_block.py The LED initial status is ON The LED turns OFF interrupt times is 1 The LED turns ON interrupt times is 2 ^Clibsoc-gpio-debug: Interrupted system call Traceback (most recent call last): File "./gpiotest_block.py", line 54, in main(gpio_input_id, gpio_output_id) File "./gpiotest_block.py", line 45, in main test_interrupt_handler(gpio_in, gpio_out) File "./gpiotest_block.py", line 12, in test_interrupt_handler gpio_in.wait_for_interrupt(-1) File "/usr/lib/python3.5/site-packages/libsoc/gpio.py", line 118, in wait_for_interrupt if api.libsoc_gpio_wait_interrupt(self._gpio, timeout) != 0: KeyboardInterrupt ----------------------- ./ 非阻塞模式下 ----------------------- root@apalis-imx6:~# ./gpiotest_nonblock.py The LED initial status is ON please enter 'Q' to quit The LED turns OFF The LED turns ON The LED turns OFF Q Do you really want to quit? yes or no yes root@apalis-imx6:~# ----------------------- 4). 使用 PyQt5 实现图形化界面 GPIO 中断程序 a). 硬件配置和连接和上面的测试场景一致。 b). 为了方便开发 PyQt5 界面,首先通过 Qtcreator 创建如下 QWidget 项目 UI 界面 // LED Status 右边的 QFrame 方框以及 QLable 用于显示 LED 当前的状态 // ‘Turn ON’ 和 ’Turn OFF’ 两个 PushButton 用于通过界面控制 LED 状态, ’Exit’ PushButton 用于退出程序 ./ 最终的 UI 源代码参考如下,将对应的 mainwindow.ui 文件复制到 Apalis iMX6 Python 应用相同路径下 https://github.com/simonqin09/libsoc-examples/blob/master/python/mainwindow.ui c). 程序源代码参考如下: https://github.com/simonqin09/libsoc-examples/blob/master/python/gpiotest_pyqt5.py 说明如下: ./ class ApplicationWindow 用于实现 Qt5 界面以及相关按键操作: // 首先通过 loadUi 函数来加载之前制作好的 UI 文件 mainwindow.ui ,然后初始化界面显示,连接各个按键对应的处理程序 // 最后开启一个新的 Qthread 线程 self.thread ,用于处理外部 GPIO 按键中断相应,连接新线程反馈信号的处理程序,最后启动新线程 // LedStatusChange 函数为处理新线程反馈回来的 LED 状态变化信号而同步改变界面显示状态的函数 // Button_On_clicked 和 Button_Off_clicked 函数用于根据界面按键的点击来对应改变 LED GPIO 输出以及界面显示的函数 // Button_Exit_clicked 和 closeEvent 函数用于处理退出程序包括子线程的退出等相关的函数 ./ class gpioInterrupt 为用于处理 GPIO 中断同时对于改变 LED GPIO 输出以及将 LED 状态变化反馈给界面主程序 // 首先定义反馈信号,并初始化所需要使用的 GPIO 引脚 // run 函数部分基本就是上面第 3 章节的阻塞模式 Python 应用的代码,这里就不做赘述了 d). 测试运行结果如下: ----------------------- root@apalis-imx6:~# ./gpiotest_pyqt5.py The LED initial status is ON set LOW set HIGH The LED turns OFF button clicked for setting LOW The LED turns ON button clicked for setting HIGH root@apalis-imx6:~# ----------------------- 5). 总结 如上述示例,使用 Python 和 PyQt5 非常方便了创建一个嵌入式界面应用程序示例,相对于传统 C 语言开机要配置交叉编译环境,整个流程更加快捷方便,同时在实现比较简单的控制的时候其运行效率也是可以接受的,另外 Python 还可以集成大量的组件方便开发,就更加简化了比如设计机器视觉、人工智能等领域的嵌入式应用开发流程。
  • 热度 2
    2019-7-15 13:55
    1119 次阅读|
    0 个评论
    【零基础】搞定LAMP(linux、apache、mysql、php)环境安装图文教程(基于centos7) ...
    一、前言   LAMP即:Linux、Apache、Mysql、Php,也就是在linux系统下运行php网站代码,使用的数据库是mysql、web服务软件是apache。之所以存在LAMP这种说法,倒不是一定要如此搭配方行,只是mysql、apache比较常用而且免费,所以linux下的php网站就使用LAMP这样的搭配。 二、环境准备    1、centos7 ,我使用的是centos7(64位)最小系统,ISO包上官网下载即可,找不到官网的到下面链接中随便下一个就可以了     http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1810.iso    2、apache ,稍后使用yum安装最新版即可    3、mysql ,当前最新版是mysql8.0了,需要到官网下载yum源而后通过yum源安装即可(文末附下载链接),也可以直接用wget获取(后续有)    4、php ,稍后使用yum安装最新版即可 三、centos准备   首先我们要让centos准备好环境,很多童鞋看网上随便找来的教程整了半天就是不能正常运行,常见原因就是漏了这一步。    1、关闭防火墙 # systemctl stop firewalld.service    使防火墙开机不启动(避免系统重启后防火墙又生效) # systemctl disable firewalld.service    2、关闭selinux # setenforce 0 setenforce: SELinux is disabled    修改selinux配置文件使其开机不启动 # vi /etc/sysconfig/selinux    //将“SELINUX=enforcing”修改为“SELINUX=disabled”   关闭防火墙和selinux后centos就准备好了,因为是测试环境嘛,所以这两个都关闭了,如果在生产环境可别直接关了,还是要设置下的。 四、安装apache   apache安装非常简单,使用下面的指令即可 # yum install -y httpd   安装好以后需要修改下配置文件使apache支持php # vi /etc/httpd/conf/httpd.conf    //在“DirectoryIndex index.html”后面添加“index.php”    //在“AddType application/x-gzip .gz .tgz”后面添加一行“AddType application/x-httpd-php .ph”    //最后启动apache # systemctl start httpd    注意:有些童鞋可能会遇到apache莫名其妙就自己挂了,可能是你内存不够,增加点虚拟内存即可   至此apache就安装和准备好了 五、安装mysql    1、将前面说到的mysql yum安装源(文末附下载链接)放到centos任意目录,直接使用yum安装。    //也可以使用wget获取该rpm包 # wget https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm    //安装yum源 # yum -y install mysql80-community-release-el7-3.noarch.rpm    //使用yum安装mysql # yum -y install mysql-community-server   注意:一般来说你会发现mysql-community-server-8.0.16-2.el7.x86_64.rpm这个包下载会很慢,所以这里我们提供百度云盘直接下载这个包(文末附下载)。将下载好的rpm包放入目录“/var/cache/yum/x86_64/7/mysql80-community/packages/”(不同系统可能不一样,你可以搜索mysql80-community找到目录位置),再次执行安装指令即可。    2、配置mysql    //启动mysql # systemctl start mysqld.service    //检查一下运行状态 # systemctl status mysqld.service    注意:对于一些新手,可能会遇到mysql莫名其妙就自己关闭的情况,可能是你的内存不够啦。linux内存不足的情况会自动关闭一些占用内存较多的应用,所以物理内存确实不足的情况可以增加点虚拟内存。    //获取默认密码(mysql8.0自带默认密码,必须使用默认密码登录后方可修改密码) # grep "password" /var/log/mysqld.log HGA4LKdjlj”    //使用默认密码进入数据库 # mysql -u root -p ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root@123456'; Query OK, 0 rows affected (0.01 sec)    注意:进入mysql后每条指令后必须加分号“;”,否则指令不会执行   注意:mysql8.0要求密码必须有一定复杂度,必须包含大小写字母、数字、特殊字符,长度也不能太短,这里我配置的密码就是Root@123456   注意:'root'@'localhost'含义是使用本地登录的root用户(一般建议本机登录和远程登录用户名、密码不要一样),如果要从外部设备访问root用户还需要做下面的设置    //设置root远程访问(如果不从外部访问就不用此配置) create user 'root'@'%' identified by 'Root@123456'; Query OK, 0 rows affected (0.01 sec)    //为远程root用户分配访问权限 grant all on *.* to 'root'@'%' with grant option; Query OK, 0 rows affected (0.00 sec)   注意:此处很多老的教程使用指令“ grant all privileges on *.* to 'root'@ '%' identified by 'Root@123456' with grant option;”,但是会报错“ERROR 1064 (42000): You have an error in your SQL syntax;check the manual that corresponds to your MySQL server version for the right syntax to use near 'identified by 'Root@123456'' at line 1”   原因是老版本使用权限修改指令可以自动创建用户(需要注意“root@%”与"root@localhost"是两个用户,便于使用不同密码),而新版本需要手动创建用户,然后向其分配权限   注意: *.* 表明所有数据库的所有表,可以通过此设置限制用户的访问(如new.abc就是new数据库的abc表)    //更新权限表使配置生效 flush privileges; Query OK, 0 rows affected (0.00 sec)    //退出数据库 exit; Bye    //修改字符编码为utf-8(中文世界一般使用utf-8编码防止中文乱码) # vi /etc/my.cnf    //在 前面添加: default-character-set=utf8    //在文件末尾添加: character-set-server=utf8 collation-server=utf8_general_ci    //保存后重启数据库即可 # systemctl restart mysqld.service   至此,数据库安装完毕,而且我们分别设置了本地登录和远程登录的密码。 六、安装php   php安装非常简单,下面两个指令分别安装了php、php-mysql支持包、php常用扩展包: # yum install -y php php-mysql # yum install -y php-gd php-xml php-process php-mbstring php-bcmath 七、测试   到apache网站代码目录中新建index.php文件 # vi /var/www/html/index.php   并输入下面的代码(此段代码的作用是输出php的信息):   保存后就可以试试访问你新建的网站了 八、更多资料   除了前面说的mysql安装相关的两个rpm文件,我们还准备了一些LAMP调优相关资料, 关注公众号“零基础爱学习”回复“LAMP”即可获取:    1、mysql80-community-release-el7-3.noarch.rpm (mysql官方源)    2、mysql-community-server-8.0.16-2.el7.x86_64.rpm (mysql主包)     放入目录“/var/cache/yum/x86_64/7/mysql80-community/packages/”(不同系统可能不一样,你可以搜索mysql80-community找到目录位置)    3、LAMP优化入门   4、Centos7防火墙配置手册   5、php-mysql 连接方式
  • 热度 3
    2019-3-26 09:53
    799 次阅读|
    2 个评论
    成为一个正式的嵌入式主板开发工程师,是一个艰辛的过程,需要开发人员维护和管理系统的每个比特和字节。从规范完善的开发周期到严格执行和系统检查,开发高可靠性嵌入式系统的技术有许多种。今天给大家介绍 7个易操作且可以长久使用的技巧,它们对于确保系统更加可靠地运行并捕获异常行为大有帮助。 技巧 1—— 用已知值填充 ROM 软件开发人员往往都是非常乐观的一群人,只要让他们的代码忠实地长时间地运行就可以了,仅此而已。微控制器跳出应用程序空间并在非预想的代码空间中执行这种情况似乎是相当少有的。然而,这种情况发生的机会并不比缓存溢出或错误指针失去引用少。它确实会发生!发生这种情况后的系统行为将是不确定的,因为默认情况下内存空间都是 0xFF,或者由于内存区通常没有写过,其中的值可能只有上帝才知道。 不过有相当完备的 linker或IDE技巧可以用来帮助识别这样的事件并从中恢复系统。技巧就是使用FILL命令对未用ROM填充已知的位模式。要填充未使用的内存,有很多不同的可能组合可以使用,但如果是想建立更加可靠的系统,最明显的选择是在这些位置放置ISR fault handler。如果系统出了某些差错,处理器开始执行程序空间以外的代码,就会触发ISR,并在决定校正行动之前提供储存处理器、寄存器和系统状态的机会 技巧 2—— 检查应用程序的 CRC 对嵌入式工程师来说一个很大的好处是,我们的 IDE和工具链可以自动产生应用程序或内存空间校验和(Checksum),从而根据这个校验和验证应用程序是否完好。有趣的是,在许多这些案例中,只有在将程序代码加载到设备时,才会用到校验和。 然而,如果 CRC或校验和保持在内存中,那么验证应用程序在启动时(或甚至对长时间运行的系统定期验证)是否仍然完好是确保意外之事不会发生的极好途径。现在一个编程过的应用程序发生改变的概率是很小的,但考虑每年交付的数十亿个微控制器以及可能恶劣的工作环境,医疗仪器应用程序崩溃的机会并不是零。更有可能的是,系统中的一个缺陷可能导致某一扇区发生闪存写入或闪存擦除,从而破坏应用程序的完整性。 技巧 3—— 在启动时执行 RAM 检查 为了建立一个更加可靠和扎实的系统,确保系统硬件正常工作非常重要。毕竟硬件会发生故障。(幸运的是软件永远不会发生故障,软件只会做代码要它做的事,不管是正确的还是错误的)。在启动时验证 RAM的内部或外部没有问题,是确保硬件可以如预期般运作的一个好方法。 有许多不同的方法可用于执行 RAM检查,但常用的方法是写入一个已知的模式,然后等上一小段时间再回读。结果应该是所读就是所写。真相是,在大多数情况下 RAM检查是通过的,这也是我们想要的结果。但也有极小的可能性检查不通过,这时就为系统标示出硬件问题提供了极好的机会。 技巧 4—— 使用堆栈监视器 对许多的嵌入式开发者而言,堆栈似乎是一股相当神秘的力量。当奇怪的事情开始发生,工程师终于被难倒了,他们开始思考,也许堆栈中发生了什么事。结果是盲目地调整堆栈的大小和位置等等。但该错误往往是与堆栈无关的,但怎能如此确定?毕竟,有多少工程师真的实际执行过最坏情况下的堆栈大小分析? 堆栈大小是在编译时就静态分配好的,但堆栈是以动态的方式使用的。随着代码的执行,应用程序需要的变量、返回的地址和其它信息被不断存储在堆栈中。这种机制导致堆栈在其分配的内存中不断增长。然而,这种增长有时会超出编译时确定的容量极限,导致堆栈破坏相邻内存区域的数据。 绝对确保堆栈正常工作的一种方法是实现堆栈监视器,将它作为系统 “保健”代码的一部分(有多少工程师会这样做?)。堆栈监视器会在堆栈和“其它”内存区域之间创建一个缓冲区域,并填充已知的位模式。然后监视器会不断的监视图案是否有任何变化。如果该位模式发生了改变,那就意味着堆栈增长得太大了,即将要把系统推向黑暗地狱!此时监视器可以记录事件的发生、系统状态以及任何其它有用的数据,供日后用于问题的诊断。 大多数实时操作系统( RTOS)或实现了内存保护单元(MPU)的微控制器系统中都提供有堆栈监视器。可怕的是,这些功能默认都是关闭状态,或者经常被开发人员有意关闭。在网络上快速搜寻一下可以发现,很多人建议关闭实时操作系统中的堆栈监视器以节省56字节的闪存空间等等,这可是得不偿失的做法! 技巧 5 - 使用 MPU 在过去,是很难在一个小而廉价的微控制器中找到内存保护单元( MPU)的,但这种情况已经开始改变。现在从高端到低端的微控制器都已经有MPU,而这些 MPU为嵌入式软件开发人员提供了一个可以大幅提高其固件(firmware)鲁棒性(robustness)的机会。 MPU 已逐渐与操作系统耦合,以便建立内存空间,其中的处理都分开,或任务可执行其代码,而不用担心被stomped on。倘若真有事情发生,不受控制的处理会被取消,也会执行其他的保护措施。请留意带有这种组件的微控制器,如果有,请多加利用它的这种特性。 技巧 6 - 建立一个强大的看门狗系统 你经常会发现的一种总是最受喜爱的看门狗( watchdog)实现是,在看门狗被启用之处(这是一个很好的开始),但也是可以用周期性定时器将该看门狗清零之处;定时器的启用是完全与程序中出现的任何情况隔离的。使用看门狗的目的是协助确保如果出现错误,看门狗不会被清零,即当工作暂停,系统会被迫去执行硬件重设定(hardware reset),以便恢复。使用与系统活动独立的定时器可以让看门狗保持清零,即使系统已失效。 对应用任务如何整合到看门狗系统中,嵌入式主板开发人员需要仔细考虑和设计。例如,有种技术可能可以让每个在一定时期内运行的任务标示它们可以成功地完成其任 务。在此事件中,看门狗不被清零,强制被复位。还有一些比较先进的技术,像是使用外部看门狗处理器,它可用来监视主处理器如何表现,反之亦然。对一个可靠的系统而言,建立一个强大的看门狗系统是很重要的。 技巧 7 - 避免易失存储器分配 不习惯在资源有限环境下工作的工程师,可能会试图使用其编程语言的特性,这种语言让他们可以使用易失存储器分配。毕竟,这是一种常在计算器系统中使用的技术,在计算器系统中,只有在有必要时,内存才会被分配。例如,以 C开发时,工程师可能倾向于使用malloc来分配在堆(heap)上的空间。有一个操 作会执行,一旦完成,可以使用free将被分配的内存返回,以便堆的使用。 在资源受限的系统,这可 能是一场灾难!使用易失存储器分配的其中一个问题是,错误或不当的技术可能会导致内存泄漏或内存碎片。 更多资料企鹅爱吧物久零要奇伞武奇, 如果出现这些问题时,大多数的嵌入式系统并没有 资源或知识来监视堆或妥善地处理它。而当它们发生时,如果应用程序提出对空间的要求,但却没有所请求的空间可以使用,会发生什么事呢? 使用易失存储器分配所产生的问题是很复杂的,要妥善处理这些问题,可以说是一个噩梦!一种替代的方法是,直接以静态的方式,简化内存的分配。例如,只要在 程序中简单地建立一个大小为 256字节长的缓冲区,而不是经由malloc请求这样大小的内存缓冲区。此一分配的内存可在整个应用程序的生命周期期 间保持,且不会有堆或内存碎片问题方面的顾虑。 以上嵌入式开发的教程可以让开发技术的人员获取更好嵌入式系统的办法。所有这些技术都是让设计者可以开发出可靠性更高嵌入式系统的秘诀。
  • 热度 2
    2018-5-4 11:36
    3794 次阅读|
    0 个评论
    【博客大赛】【小梅哥FPGA】使用DS-5编写和调试SoC的Linux应用程序 ...
    对于 Intel Cyclone V SoC FPGA 用户,如果仅仅开发应用程序,也可以在 Windows 环境下完成。 Intel 针对其自家的 SoC FPGA 芯片提供了定制的 DS-5 软件,该软件为 ARM 公司针对其自家芯片研发,功能强大,尤其是其自带的编译器,编译出来的 ARM 可执行文件运行起来有更高的效率。软件不仅支持 ARM 裸机程序开发和调试,也支持 Linux 应用程序开发和调试。不过其自带的编译器和调试器是收费的,需要获得相应的 License 才能够使用。但同时该软件也集成了有 Linaro 公司针对 Cyclone V SoC FPGA 验证通过的专用 GCC 编译工具,名字叫 gcc-linaro-arm-linux-gnueabihf ,使用该工具编译和调试 Linux 应用程序无需获取 License 。 本节将介绍如何使用 Intel 版的 DS-5 软件,创建和编译,并调试一个最简单的 Linux 应用程序。 1 、启动 DS-5 从开始菜单栏中找到 ARM DS-5 v5.27.1 目录,选择 Eclipse for DS-5 v5.27.1 打开。 第一次启动会要求设置 workspace ,如图 下图 所示,如果不希望每次都出现该提示框,可勾选界面中的复选框。 这里选择一个靠谱的位置作为工作空间路径,例如我们在编写资料时,选择的 D:\fpga\ac620_soc\demo_debug\firmware 。 点击 OK ,进入 Eclipse 的欢迎界面,如图 10.105 所示 点击 Welcome to DS-5 页面的小叉即可关闭欢迎页面,进入软件的主界面。 如果我们没有为 DS-5 软件添加 License ,那么软件每次次启动会默认弹出下列对话框,由于仅仅开发 Linux 应用程序无需 License ,因此直接关闭该窗口即可。 说明 : 勾选上界面中的复选框之后,下次打开 DS-5 ,软件会直接进入主界面,不会再弹出路径选择对话框,如果以后我们希望切换路径,可以在软件打开之后,依次点击菜单栏中的 other 来重新打开这个窗口 2 、创建 C 工程 点击主界面 File à New à C Project ,如图 10.107 所示,选择创建 C 工程。 在弹出的工程创建界面,设置工程名称为 “ hello ” ,工程类型为 “ Empty Project ” , Toolchain 选择使用 “ GCC 4.x (DS-5 built in) ” ,如 下图 所示。 设置好后,点击 Next ,在下图所示的配置界面选中 “ Debug ” 和 “ Release ” 两个编译目标。 然后点击 Finish 按钮,完成工程创建,得到一个空工程,接下来将添加一个 C 程序文件到该工程,并编写 C 代码。点击 File à New à Source File ,选择创建源文件,如下图所示。 在 Source File 界面,设置文件名为 “main.c” ,使用默认 C 模板,如下图所示: 点击 Finish ,得到添加了 main.c 的工程,如下图所示。 此时, main.c 文件还是空的, 在 main.c 中添加如下代码并保存 : #include int main ( int argc, char *argv ”,选择 Copy ,复制 hello 文件。 在点击监视窗口的“ Remote System Explorer ”标签,切换到远程系统视图,点击展开“ /root ”,找到 opt 文件夹,在右键菜单选择 Paste ,将已复制的 hello 文件粘贴到目标系统的“ /opt ”目录下。 然后在 Terminal 窗口,进入 “ /opt ” 目录,用 chmod 命令为 hello 文件增加可执行权限,操作完成的结果如下图所示。 3. 运行应用程序 通过上述操作,我们已经完成了一个最简单的 Linux 应用程序的创建、编译和安装到目标板上,接下来就可以在目标板上执行了,执行的方法非常简单,只需要接着 在 Terminal 窗口,输入下述命令即可执行该应用程序。 ./hello 操作完成的结果如下图所示。 注意,该命令需要在可执行文件所在目录输入才能执行。否则请先使用 cd 命令将路径切换到 opt 目录下。 5 远程调试 1. GDB 设置 打开 Run à Debug Configrations ,在调试配置界面,双击 “ C/C++ Application ” 栏,将会生成 “ hello Debug ” 调试目标,如下图所示。 点击 Debugger 选项卡,设置 Debugger 为 gdbserver ,并在 GDB Debugger 中浏览到交叉编译器目录下的 arm-linux-gnueabihf-gdb.exe ,并设置 GDB command set 为 Standard ,如下图所示。 特别说明 : DS-5 软件的安装包下默认提供了一系列 arm-linux-gnueabihf 工具,包括 gcc 编译工具,但是不知出于什么目的,偏偏将 arm-linux-gnueabihf-gdb.exe 这个工具给去除了,导致软件默认安装完成后, D:\intelFPGA\17.1\embedded\ds-5\sw\gcc\bin\ 目录下是没有这个程序的,为了实现对应用程序的调试,我们选择手动设置调试工具。具体方法为将我们提供的 arm-linux-gnueabihf-gdb.exe 文件拷贝到 D:\intelFPGA\17.1\embedded\ds-5\sw\gcc\bin\ 目录下,然后就可以使用了。 点击 Debugger Options 的 Connection 选项卡,设置连接类型为 TCP ,在 Host name 栏填写目标板的 IP 地址,在 Port number 栏设置 TCP 连接端口号,如下图所示: 设置完毕后,点击 Apply 按钮,使设置生效,然后点击 Close 关闭窗口 2. GDB 连接和调试 在 Eclipse 主界面,点击监视窗口的 Remote System Explorer ,切换到远程系统视图,在终端输入下列命令启动 gdbserver : # cd /opt # gdbserver :10000 hello 注意 TCP 连接端口必须与 Eclipse 所设定的一致。实际操作截图如下图所示 点击 Run à Debug ,开始 GDB 远程连接,出现如下图所示窗口,点击 Yes 即可。 最终进入如下图所示的调试界面。 点击 Run à Step Over ,或者直接点击 Step Over 图标,单步运行程序,切换到远程系统视图,可以看到终端输出字符串 “ hello world ” ,如下图所示。 调试完毕,点击 Run à Terminate ,或终止的快捷图标以停止调试。
相关资源
  • 所需E币: 1
    时间: 昨天 09:26
    大小: 10.75MB
    《精通Linux设备驱动程序开发》是Linux设备驱动程序开发领域的权威著作。全书基于2.6内核,不仅透彻讲解了基本概念和技术,更深人探讨了其他书没有涵盖或浅尝辄止的许多重要主题和关键难点,如PCMCIA、I2C和USB等外部总线以及视频、音频、无线连网和闪存等驱动程序的开发,并讲解了相关的内核源码文件,给出了完整的开发实例。《精通Linux设备驱动程序开发》适合中高级Linux开发人员阅读。
  • 所需E币: 1
    时间: 昨天 09:31
    大小: 15.96MB
    《鸟哥的Linux私房菜:基础学习篇》是最具知名度的Linux入门书《鸟哥的Linux私房菜基础学习篇》的最新版,全面而详细地介绍了Linux操作系统。全书分为5个部分:第一部分着重说明Linux的起源及功能,如何规划和安装Linux主机;第二部分介绍Linux的文件系统、文件、目录与磁盘的管理;第三部分介绍文字模式接口shell和管理系统的好帮手shell脚本,另外还介绍了文字编辑器vi和vim的使用方法;第四部分介绍了对于系统安全非常重要的Linux账号的管理,以及主机系统与程序的管理,如查看进程、任务分配和作业管理;第五部分介绍了系统管理员(root)的管理事项,如了解系统运行状况、系统服务,针对登录文件进行解析,对系统进行备份以及核心的管理等。本书内容丰富全面,基本概念的讲解非常细致,深入浅出。各种功能和命令的介绍,都配以大量的实例操作和详尽的解析。本书是初学者学习Linux不可多得的一本入门好书。
  • 所需E币: 1
    时间: 昨天 09:55
    大小: 13.81MB
    内容简介  为了彻底理解是什么使得Linux能正常运行以及其为何能在各种不同的系统中运行良好,你需要深入研究内核最本质的部分。内核处理cpu与外界间的所有交互,并且决定哪些程序将以什么顺序共享处理器时间。它如此有效地管理有限的内存,以至成百上千的进程能高效地共享系统。它熟练地统筹数据传输,这样cpu不用为等待速度相对较慢的硬盘而消耗比正常耗时更长的时间。  《深入理解Linux内核,第三版》指导你对内核中使用的最重要的数据结构、算法和程序设计诀窍进行一次遍历。通过对表面特性的探究,作者给那些想知道自己机器工作原理的人提供了颇有价值的见解。书中讨论了intel特有的重要性质。相关的代码片段被逐行剖析。然而,本书涵盖的不仅仅是代码的功能,它解释了Linux以自己的方式工作的理论基础。  本书新版涵盖2.6版本,其在内核的几乎每个子系统中都有重要的变化,尤其是在内存管理和块设备领域。本书侧重于以下主题:  ·内存管理,包括文件缓存、进程交换和直接内存存取(dma)  ·虚拟文件系统层和第二、第三扩展文件系统  ·进程创建和调度  ·信号、中断和设备驱动程序的主要接口  ·定时  ·内核中的同步  ·进程间通信(ipc)  ·程序的执行  《深入理解Linux内核》将使你了解Linux的所有内部工作,它不仅仅是一个理论上的练习。你将学习到哪些情况下Linux性能最佳,并且你将看到,在大量的不同环境里进行进程调度、文件存取和内存管理时,它如何满足提供良好的系统响应的需要。这本书将帮助你充分利用Linux系统。
  • 所需E币: 0
    时间: 2020-5-7 13:04
    大小: 500.58KB
    上传者: 我爱下载
    基于i.mx6处理器的Yocto项目及Linux软件开发
  • 所需E币: 3
    时间: 2020-5-3 08:55
    大小: 3.01MB
    上传者: 指的是在下
    本书分为四大部分,第1部分“C++多线程系统编程”考察多线程下的对象生命期管理、线程同步方法、多线程与C++的结合、高效的多线程日志等。第2部分“muduo网络库”介绍使用现成的非阻塞网络库编写网络应用程序的方法,以及muduo的设计与实现。第3部分“工程实践经验谈”介绍分布式系统的工程化开发方法和C++在工程实践。本书适用的硬件环境是主流x86-64服务器,多路多核CPU、几十GB内存、千兆以太网互联。除了第5章讲诊断日志之外,本书不涉及文件IO。 
  • 所需E币: 5
    时间: 2019-12-26 12:30
    大小: 8.54MB
    上传者: rdg1993
    嵌入式LINUX教程……
  • 所需E币: 4
    时间: 2019-12-26 12:21
    大小: 4.76MB
    上传者: 238112554_qq
    Linux内核0.11(0.95)完全注释……
  • 所需E币: 3
    时间: 2019-12-26 12:20
    大小: 30.29KB
    上传者: wsu_w_hotmail.com
    GCC中文手册……
  • 所需E币: 5
    时间: 2019-12-26 10:51
    大小: 57.5KB
    上传者: 微风DS
    在Linux下用Qt开发新一代DTS图形数据系统的分析……
  • 所需E币: 3
    时间: 2019-8-5 12:39
    大小: 26.1MB
    上传者: bambooslip
    linux学习大全。1、认识Linux4、Linux命令完整的,见下载文件。
  • 所需E币: 3
    时间: 2019-12-26 10:41
    大小: 96.53KB
    上传者: quw431979_163.com
    介绍了几种减裁Linux核心的方法……
  • 所需E币: 5
    时间: 2019-12-26 10:41
    大小: 167.9KB
    上传者: 微风DS
    介绍如何在Linux上添加硬实时功能1.0……
  • 所需E币: 5
    时间: 2019-12-26 10:33
    大小: 976.56KB
    上传者: 978461154_qq
    Understanding.Linux.Network.Internals.part6……
  • 所需E币: 5
    时间: 2019-12-26 10:33
    大小: 976.56KB
    上传者: givh79_163.com
    Understanding.Linux.Network.Internals.part7……
  • 所需E币: 5
    时间: 2019-12-26 10:33
    大小: 976.56KB
    上传者: 978461154_qq
    Understanding.The.Linux.Kernel.part1……
  • 所需E币: 3
    时间: 2019-12-26 10:33
    大小: 976.56KB
    上传者: 16245458_qq.com
    Understanding.The.Linux.Kernel.part2……
  • 所需E币: 4
    时间: 2019-12-26 10:33
    大小: 950.29KB
    上传者: quw431979_163.com
    Understanding.The.Linux.Kernel.part3……
  • 所需E币: 4
    时间: 2019-12-26 10:33
    大小: 976.56KB
    上传者: rdg1993
    Understanding.Linux.Network.Internals.part5……
  • 所需E币: 3
    时间: 2019-12-26 10:32
    大小: 976.56KB
    上传者: quw431979_163.com
    Understanding.Linux.Network.Internals.part1……
  • 所需E币: 5
    时间: 2019-12-26 10:32
    大小: 976.56KB
    上传者: 978461154_qq
    Understanding.Linux.Network.Internals.part2……
广告