python 2.7 ctypes:.so 共享库的循环依赖关系
我已经在ARM Linux 64bit上加载的一组库,是Ubuntu派生的API(关闭源). 我需要使用Python脚本(目前为2.7)与此库进行交互,因此我使用的是CTYPES. 在上次发行版之前,我能够在找到正确的加载顺序后加载所有SO毫无问题. 但是,在最后一个版本中,它们建立了两个库,即libpos.so和libubx,并具有相互依赖性. 实际上,当我尝试加载这些库时,我会得到: libubx=CDLL("libubx.so", mode = RTLD_GLOBAL) libpos=CDLL("libpos.so", mode = RTLD_GLOBAL) 我得到 Traceback (most recent call last): File "testloading.py", line 11, in libubx=CDLL("libubx.so", mode = RTLD_GLOBAL) File "/usr/lib/pytho
30 2024-04-22
编程技术问答社区
yocto中的交叉编译库配方
我有一个库的库码很少(.c)和标头文件,并且输出共享库(.so). 目前,我正在使用makefile生成.so C = gcc FLAGS = # -std=gnu99 -Iinclude CFLAGS = -fPIC -g #-pedantic -Wall -Wextra -ggdb3 LDFLAGS = -shared DEBUGFLAGS = -O0 -D _DEBUG RELEASEFLAGS = -O2 -D NDEBUG -combine -fwhole-program TARGET = libesys.so SOURCES = $(wildcard *.c) HEADERS = $(wildcard *.h) OBJECTS = $(SOURCES:.c=.o) all: $(TARGET) $(TARGET): $(OBJECTS) $(CC) $(FLAGS) $(CFLAGS
34 2024-04-10
编程技术问答社区
Linux寄存器读取arm i.mx257从userland-devmem不工作
我目前正在使用I.MX257平台,并想读取一些外围寄存器(特定的IOMUX寄存器),以查看如何配置或设置正确. 我也阅读了Busybox和DevMem2的Devmem.尝试了两者,都有一个错误.当前,自定义板正在从Meta-FSL-ARM YOCTO META软件包中运行Linux内核版本4.6.0-RC7.该系统是使用Yocto构建的. root@system/und./tmp/devmem2 0x43fac190 /dev/mem打开. 毫无疑问的故障:非linefetch上的外部中止(0x008)在0xB6F3A190上 PGD​​ = C3334000 [B6F3A190] *PGD = 8285E831, *PTE = 43FAC103, *PPTE = 43FACAA2 映射在地址0xb6f3a000的内存. 巴士错误 该工具会获得信号错误. config_strict_devmem选项未在内核配置中设置. 我找到了另一篇文章 htt
14 2024-04-10
编程技术问答社区
当试图写到MTD设备时得到EINVAL值
我在此答案中. 我添加了错误处理. open()擦除和read()都没有错误,我阅读的20个字节都是0xff. 但是,当尝试从data[]数组编写20个字节时,我从write()函数中获得EINVAL错误代码. 问题的原因是什么?在尝试写作之前,我确实删除了记忆... 解决方案 我已经看过您的原始文章. 我最近有同样的问题,我发现写的大小很重要. mtd_info_t(struct mtd_info_user)具有一个命名writesize的变量 (参考:struct mtd_info_user { __u8 type; __u32 flags; __u32 size; /* Total size of the MTD */ __u32 erasesize; __u32 writesize; __u32 oobsize; /* Amount of OOB data per block (e.g. 16) */ __u64 padding; /* Old obsolete f
10 2024-04-09
编程技术问答社区
使用gstreramer播放歌曲需要遵循什么顺序?
我正在建立基于GSTREAMER-0.10的音乐播放器.我能够成功播放,但是当我更改管道状态时,我会有问题.我已经发布了代码以初始化并启动下面的管道: void start_gstreamer() { gst_init(0,NULL);//call to initialise gstreamer time_val=0;//set to default value volume = 1.0;//set volume to default value player = gst_element_factory_make ("playbin2", "player");//get pipeline equalizer = gst_element_factory_make ("equalizer-10bands", "equalizer");//get the 10band equalizer convert = gst_element_
36 2024-04-09
编程技术问答社区
在安卓平板电脑上添加一个驱动程序
我正在为Android创建相机驱动程序.我有我的mydriver.c文件. 显然我需要将其编译成.ko,是吗? 然后加载它,我应该做一个 #insmod ./mymodule.ko,它会工作吗? 我需要生根吗?以及如何将.ko文件放在Android平板电脑上? 解决方案 是的,您需要是根.并且,insmod ./yourmodule.ko应该正常工作. 其他解决方案 您是否试图通过Android的摄像头API作为标准摄像机使这款新相机起作用? 在这种情况下,除非您的平板电脑具有特别不寻常的配置,否则只需安装新的内核驱动程序就不会做任何事情.您仍然需要一个Android Camera HAL模块实现,该实现将驾驶员内核接口和Android的摄像机框架代码之间转换命令和数据.
14 2024-04-09
编程技术问答社区
编写AT命令的嵌入式linux
我在命令上遇到问题的问题.当我使用Minicom -B 115200 -D/dev/ttysp0 -term = VT100时,它可以完美无瑕 但是我无法弄清楚如何在C代码中做同样的事情. 我没有收到任何错误,但是模块对命令没有反应.有人知道可能怎么了? #include #include #include #include #include
26 2024-04-09
编程技术问答社区
用libwebsockets编译libuv
我正在尝试运行使用LWS库安装的" libwebsockets-test-server",但它不会运行,因为" lwsts [31616]:libuv support note 我已经检查了Libuv是否已安装(1.8.0).我还更改了Libuv在CMAKE中的设置,并重新编译了图书馆. LWS_USE_LIBUV = 1 我如何与libuv进行编译? 我在Ubuntu 16.04上,使用ARM-Linux-GCC进行了交叉编译.我已经成功编译了程序,将它们加载到嵌入式板(TS-7800),并运行可执行文件,但尚未使用LWS.我对Linux和交叉兼容器是相对较新的. 解决方案 使用'cmake -dlws_with_plugins = 1'配置CMAKE,更改配置以将LWS_USE_LIBUV设置为1等于1,并与Make一起编译Libuv. 由于我打算将插件与LWSW一起使用,因此这是解决问题的适当解决方案.
2 2024-04-08
编程技术问答社区
通过对套接字文件描述符的ioctl调用获得数据包的时间戳
我正在处理运行嵌入Linux的系统.我正在尝试从我在插座上接收的流中获取数据包时间戳. 创建套接字后,我执行以下操作: if (fd != -1) { int enabled = 1; setsockopt(fd, SOL_SOCKET, SO_TIMESTAMP, &enabled, sizeof(enabled); } 之后,我绑定了插座,套接字为SOCK_STREAM类型.我通过调用函数recv(fd, buf, size, 0)成功地在套接字上接收数据.现在,为了获得收到数据的时间戳,我目前正在尝试以下操作: ret = recv(fd, buf, size, 0); if (ret > 0) { struct timeval tv_ioctl; tv_ioctl.tv_sec = 0; tv_ioctl.tv_usec = 0; int error = ioctl(fd, SO_TIMESTAMP, &tv_
10 2024-04-08
编程技术问答社区
为什么i2c_smbus功能不可用?(I2C - 嵌入式Linux)
在开发嵌入的Linux软件以在I2C总线上进行通信时,有许多参考文献涉及使用 i2c_smbus _ 功能.当 i2c_smbus 函数(例如 i2c_smbus_read_word_word_data )在软件项目中引用了ARM8处理器错误的软件项目,例如' i2c_smbus_read_rad_word_word_word_word_words'在此范围中未声明编译. 对以下标头文件的调查表明,大多数 i2c_smbus 函数定义不存在. /usr/arm-linux-gnueabi/include/linux/i2c.h /usr/arm-linux-gnueabi/include/linux/i2c-dev.h 也是以下参考如何解决此问题? 研究参考 使用linux in linux i2c i2c linux userspace的i2c通信 - 第二部分 i2c dev dev Interface 解决方案 因为您正在为应用程序使用错
18 2024-04-08
编程技术问答社区
如何编写一个简单的Linux设备驱动?
我需要从头开始为OMAP4编写SPI Linux字符设备驱动程序. 我知道编写设备驱动程序的一些基本知识.但是,我不知道如何从头开始编写平台特定的设备驱动程序. 我已经写了一些基本的Char驱动程序,我认为编写SPI设备驱动程序与之相似. char驱动程序的结构file_operations包含驱动程序中实现的功能. struct file_operations Fops = { .read = device_read, .write = device_write, .ioctl = device_ioctl, .open = device_open, .release = device_release, /* a.k.a. close */ }; 现在,我正在浏览 spi-omap2- McSpi.c 代码作为参考,以获取从头开始开发SPI驱动程序的想法. 但是,我看不到诸如打开,阅读,写作等的功能. 不知道该程序从哪里开
8 2024-04-07
编程技术问答社区
嵌入式Linux,应用程序状态冻结,重新启动
我们有一个嵌入式应用程序,现在它要求保存和重新加载其状态.就像在PC游戏中一样,您必须在哪里保存它,然后才能出去呼吸一些新鲜的空气.该产品本质上是安静的进化,没有适当的设计,因此不能选择要保存的数据. 该软件在C中,因此所有数据都具有固定的地址(.DATA段),它的确定性,A和无动态内存分配.因此,从理论上讲,我在文件中备份了该数据段的备份,然后重新启动应用程序从文件中更新.这种方法可能会节省更多的数据,但我对此表示满意. 我该如何在短期执行时间内执行此操作? 另外,如何在运行时识别.data段的开始和结尾? 解决方案 您想要应用程序检查点,所以也许 berkley实验室检查点重新启动库可能会帮助您. 您可以使用 mmap(2)系统调用,如果您确定所有数据都有固定的地址等... 要了解您当前的内存段和映射,请读取(从您的应用程序)/proc/self/maps文件.还有/proc/self/smaps等.了解 proc(5),IE
8 2024-04-07
编程技术问答社区
使用C语言的Beaglebone黑色PWM
我在cbeglebone黑色的C中写了一个示例PWM函数.每当我在其他模块或Main()中进行函数调用时,我最终会陷入分割故障.请帮助我在犯错以及如何处理这个问题的地方提供帮助. 以下是代码. int trigger_pwm_output(unsigned input_no ) { FILE *pwm,*duty,*period,*run;`` uint16_t input=0; uint8_t input_no=0,input_state=0; unsigned int duty_cycle =500000; pwm = fopen("/sys/devices/bone_capemgr.9/slots", "w"); fseek(pwm,0,SEEK_SET); fprintf(pwm,"am33xx_pwm"); fflush(pwm); switch(input_no) {
6 2024-04-07
编程技术问答社区
如何计算发送和接收的网络利用率?
如何计算用于使用C或shell脚本传输和接收的网络利用率? 我的系统是嵌入式Linux.我当前的方法是记录接收到的字节(B1),等待1秒,然后再次记录(B2).然后知道链路速度,我计算使用的接收带宽的百分比. 接收利用率=(((((b2 -b1)*8)/link_speed)*100 有更好的方法吗? 解决方案 感谢" CSL"将我指向VNSTAT的方向.这里使用VNSTAT示例是我如何计算网络利用率的方式. #define FP32 4294967295ULL #define FP64 18446744073709551615ULL #define COUNTERCALC(a,b) ( b>a ? b-a : ( a > FP32 ? FP64-a-b : FP32-a-b)) int sample_time = 2; /* seconds */ int link_speed = 100; /* Mbits/s */ uint64_t rx, rx1,
12 2024-04-07
编程技术问答社区
SocketCAN select()和write()不会阻塞。
我正在使用socketcan在嵌入式设备(SOC/ARM Core/Linux)上测试CAN接口,我想使用有效的代码尽可能快地发送数据以进行测试. 我可以作为BSD套接字打开CAN设备(" CAN0"),并以"写"发送框架.这一切都很好. 我的桌面显然可以比CAN传输速率更快地生成帧(我使用的是500000 bps).为了有效发送,我尝试在套接字文件描述符上使用"选择"等待它准备就绪,然后使用"写".但是,无论发送缓冲区的状态如何,"选择"似乎立即返回,并且"写"也没有阻止.这意味着,当缓冲区填充时,我会从"写入"(返回值-1)中获得错误,而ERRNO设置为105("无缓冲空间可用"). 这意味着我必须等待任意时间,然后再次尝试写作,这似乎很效率(投票!). 这是我的代码(C,编辑为简洁): printf("CAN Data Generator\n"); int skt; // CAN raw socket struct sockaddr_can
12 2024-04-07
编程技术问答社区
在arm-linux中打印堆栈跟踪
我遵循这篇文章打印堆栈跟踪当我的GCC C ++应用崩溃时,如何生成stacktrace.它在X86 Linux中效果很好.谁能教我如何使其在Arm-Linux上工作? 我正在使用Arm-Linux-GCC 4.4.3. [root@FriendlyARM /]# ./test1 Error: signal 11: [0x0] 在x86 中 mickey@mickeyvm:~/Desktop/workspace/test/testCatchSeg/src$ ./test1 Error: signal 11: ./test1(_Z7handleri+0x19)[0x804876d] [0xedd400] ./test1(_Z3bazv+0x10)[0x80487c2] ./test1(_Z3barv+0xb)[0x80487e1] ./test1(_Z3foov+0xb)[0x80487ee] ./test1(main+0x22)[0x8048812] /lib/i38
10 2024-04-07
编程技术问答社区
取消pthread_cond_wait()会挂掉PRIO_INHERIT的mutex。
更新,2012年4月10日: 我在pthread_cond_wait中取消线程的问题,该线程使用PTHREAD_PRIO_INHERIT属性集使用静音.这只会在某些平台上发生. 以下最小示例证明了这一点:(用g++ .cpp -lpthread编译) #include #include pthread_mutex_t mutex; pthread_cond_t cond; void clean(void *arg) { std::cout
8 2024-04-07
编程技术问答社区
Erasing Flash NOR: ioctl(MEMUNLOCK) return status?
我试图用c ... 中的Linux MTD驱动程序擦除和闪存 我对ioctl(MEMUNLOCK)呼叫的返回状态感到困惑,即使ioctl(MEMERASE)在此之后取得了成功,也会返回错误. 以下代码显示警告消息,但有效(即删除了闪存块): int erase_MTD_Pages(int fd, size_t size, off_t offset) { mtd_info_t mtd_info; erase_info_t ei; ioctl(fd, MEMGETINFO, &mtd_info); ei.length = mtd_info.erasesize; for(ei.start = offset; ei.start
10 2024-04-07
编程技术问答社区
挥发性及其有害影响
我是嵌入式开发人员,使用I/O端口时使用挥发性关键字.但是我的项目经理建议使用挥发性关键字有害,并且有很多抽签,但是在大多数情况下,我发现挥发性在嵌入式编程中很有用,因为我的知识在内核代码中的挥发性是有害的,因为我们的代码的更改将变得更改不可预料的.在嵌入式系统中也使用挥发性有任何缺点吗? 解决方案 否,volatile无害.在任何情况下.曾经.没有可能的代码构造的代码会随着对象添加volatile的添加(以及对该对象的指针).但是, volatile通常对的理解较少.内核文档指出volatile应该被认为是有害的原因是,人们一直使用它以破碎的方式使用内核线之间同步.特别是,他们使用了volatile整数变量,就好像对它们的访问所保证为原子,这不是原子. volatile也不是没有用的,尤其是如果您裸露金属,您 Will 需要它.但是,像其他任何工具一样,重要的是要在使用volatile之前了解volatile的语义. 什么volatile是 访问volatil
8 2024-04-07
编程技术问答社区
c语言中的 "short int "和 "short "有什么区别?
将变量声明为简短int和简短有什么区别? 在GCC编译器中,Short占2个字节(用sizeof(short)检查),而简短的int也给出了2个大小的2个字节.这两个都不相同?在哪种情况下,这些声明会有所帮助? 预先感谢 解决方案 short对于short int来说,它们在任何C编译器中都是等效的. 对于long int vs long,long long int vs long long. 其他解决方案 short,short int,signed short int和signed short都是相同的数据类型. so sizeof(short) == sizeof(short int) long 也是如此
26 2024-04-07
编程技术问答社区