Articles of embedded

读取串口块不明原因

我正试图在Linux下使用termios框架来通过UART(usbserial)接口非接触式智能卡读卡器。 这个代码可以在PC上正常工作,但是当我在ARM9目标上交叉编译并试用时,它能够打开设备甚至将命令写入设备,但是读取命令无限期地被阻塞。 这里是代码片段: int mifare_rdr_init(struct mifare_1K * ptr, char *rdr_devnode) { bzero(ptr, sizeof(struct mifare_1K)); // zero the entire structure // open serial device int fd = open(rdr_devnode, O_RDWR|O_NOCTTY ); if (fd == -1) { perror("Failed to open serial device "); return 1; } ptr->serialfd = fd; // save file descriptor ptr->serialdev.c_iflag = 0; // no […]

我需要debuggingpthreads?

我想debugging我的自定义Linux发行版上的pthreads,但我错过了一些东西。 我的主机是Ubuntu 12.04,我的目标是使用crosstool-NG交叉编译器工具集构build的i486定制embedded式Linux,其余的操作系统是使用Buildroot制作的。 我将列举事实: 我可以在我的目标上运行multithreading应用程序 当我在目标上运行multithreading应用程序时, Google Breakpad无法创build崩溃报告。 当我在我的主机上运行完全相同的应用程序与完全相同的构buildBreakpad库将成功。 GDB无法在我的目标上debuggingmultithreading应用程序。 例如 $./gdb -n -ex "thread apply all backtrace" ./a.out –pid 716 dlopen failed on 'libthread_db.so.1' – /lib/libthread_db.so.1: undefined symbol: ps_lgetfpregs GDB will not be able to debug pthreads. GNU gdb 6.8 我不认为ps_lgetfpregs是因为这个问题。 我的crosstool构build了libthread_db.so文件,并将其放在目标上。 我的crosstool构build为我的目标创build了gdb,所以它应该与我在目标上运行的库相链接。 如果我在我的主机上运行gdb,对我的testing应用程序,我得到每个运行线程的回溯。 我怀疑Breakpad的问题与GDB的问题有关,但是我不能证实这一点。 唯一的共同点是缺乏multithreadingdebugging。 我的主机和目标之间有一些关键的区别阻止了我能够debugging目标上的pthreads。 有谁知道它是什么? 编辑: TI的Denys Dmytriyenko表示: 通常情况下,GDB不是很挑剔,你可以混合使用不同版本的gdb和gdbserver。 但是,不幸的是,如果您需要debuggingmultithreading应用程序,那么对于特定的API有一些依赖关系… 例如,如果您没有为线程支持正确构buildGDB,则可能会看到以下消息之一: […]

无限的abort()在c ++程序核心转储的背后

我有一个奇怪的问题,我无法解决。 请帮忙! 该程序是在ARM Linux机器上运行的multithreadingc ++应用程序。 最近我开始testing它的长时间运行,有时会在1-2天之后崩溃,如下所示: *** glibc detected ** /root/client/my_program: free(): invalid pointer: 0x002a9408 *** 当我打开核心转储我看到主线程似乎有一个损坏的堆栈:我所看到的是无限的中止()调用。 GNU gdb (GDB) 7.3 … This GDB was configured as "–host=i686 –target=arm-linux". [New LWP 706] [New LWP 700] [New LWP 702] [New LWP 703] [New LWP 704] [New LWP 705] Core was generated by `/root/client/my_program'. Program terminated with […]

控制Linuxembedded式应用程序的启动屏幕

在embedded式编程中,通常需要通过一些自定义的“加载”animation或启animation面从开机到启动来取代默认的Linux启动输出​​。 有什么办法可以做到这一点? 有没有办法在整个启动序列中使用相同的“进程”? 这怎么解决? 我猜我们需要一个自制的内核吗? 谢谢!

如何在Linux上正确设置串行通信

我试图读写FPGA板上的数据。 电路板本身带有一个驱动程序,在电路板插入时创build一个名为ttyUSB0的terminal设备。在FPGA上实现了一个asynchronous接收器和发送器,它们似乎工作正常。 但是,在C方面似乎存在一个问题。 我一直在使用一些testing向量来testingFPGA是否输出正确的信息。 我发现了一些事情: 设备有时无法正确打开 terminal属性有时无法被检索或设置。 读取有时是非阻塞的,不会检索正确的值。 以下是我如何设置terminal和文件描述符选项。 其中很多是从这里采取: http : //slackware.osuosl.org/slackware-3.3/docs/mini/Serial-Port-Programming 对于为什么程序可能失败的任何build议或意见将是非常有帮助的。 #include <stdio.h> // Standard input/output definitions #include <string.h> // String function definitions #include <unistd.h> // UNIX standard function definitions #include <fcntl.h> // File control definitions #include <errno.h> // Error number definitions #include <termios.h> // POSIX terminal control definitions int open_port(void){ int […]

检测堆栈溢出

操作系统如何检测用户空间程序的堆栈溢出[然后向这些用户空间程序发送SIGTERM或SIGSEGV]?

我应该在embedded式系统中使用哪种服务器端网页技术?

我正在开始一个新的项目,我想弄清楚我应该使用什么技术。 这是一笔交易,我正在编写一些可以在无线路由器上运行的软件,我想提供一个Web界面。 所以最有可能的是我将不得不做一些服务器端的Web开发。 唯一的问题是,我将部署这个设备只有16 MB的RAM(Ubiquiti Bullet)。 这里有一些更多的信息: 1.)我将使用openwrt(linux)。 2.)显然它必须是轻量级的3.)这是一个学校项目,所以我可以使用任何我想要的技术。 显然,PHP是一个明显的select,但还有什么更刺激的(我对PHP没有兴趣)。 提前致谢!

在android上移植C ++ lib / app

我想将几个C / C ++库移植到Android上,这将是多么的可行 例如,OpenSSL是否可以移植或假设依赖于OpenSSL的应用程序,当我认为Android本身具有libssl.so时,将其移植到Android的最佳方式是什么 什么是可用的工具,例如Scratchbox,还有其他的select吗? 有人有经验吗?

embedded式Linux – 部署固件更新的机制?

我正在考虑在Yocto项目中开发一个embedded式Linux项目(一个工业应用程序),对于那些在embedded式Linux方面有经验的人,我有一些问题 – Yocto会有奖金。 只需要了解固件更新中常用的function。 我有一些要求,即身份validation,一个安全的通信协议,如果更新失败的某种types的回滚。 另外,如果有一种方法可以逐渐在整个设备上释放补丁,那么这也是一个有趣的现象,因为我想避免在现场使用设备。 如何将更新/修补程序部署到现场设备 – 开发它需要多长时间? 有什么其他的考虑我缺less?

ELF文件标题

关于精灵文件标题的一个简短的问题,我似乎无法find任何有用的如何添加/更改精灵标题中的字段。 我希望能够改变魔术数字,并添加一个生成date头,可能还有一些其他的东西。 据我了解,链接器创build标题信息,但我没有看到任何引用它的LD脚本(虽然我是新的ld脚本)。 我正在使用gcc和ARM构build。 谢谢! 更新: 好的,也许我的第一个问题应该是:有可能在链接时创build/编辑头文件?