在线提供哪些活跃的Linux /嵌入式Linux论坛?
我正在为一个2.6.x内核的Linux内核模块工作,我需要查看汇编输出,虽然它目前是作为临时文件完成的删除后的字.我想将汇编输出与我的C源文件混合在一起,这样我就可以轻松追踪问题所在.这是针对ARMv6内核的,显然objdump不支持这种架构.我在下面包含了我的makefile.
ETREP=/xxSourceTreexx/
GNU_BIN=$(ETREP)/arm-none-linux-gnueabi/bin
CROSS_COMPILE := $(GNU_BIN)/arm-none-linux-gnueabi-
ARCH := arm
KDIR=$(ETREP)/linux-2.6.31/
MAKE= CROSS_COMPILE=$(CROSS_COMPILE) ARCH=$(ARCH) make
obj-m += xxfile1xx.o
all:
$(MAKE) -C $(KDIR) M=$(PWD) modules
clean:
$(MAKE) -C $(KDIR) M=$(PWD) clean
Run Code Online (Sandbox Code Playgroud) linux makefile linux-device-driver linux-kernel embedded-linux
我有一个由第三方开发的Linux进程,它与终端通信.对于调试,我希望看到前面的通信.
有人可能会认为cat这样做(看一个方向):
./third-party-app &
cat /dev/tty
Run Code Online (Sandbox Code Playgroud)
......但事实并非如此.相反,cat将窃取一半用于应用程序的数据,这几乎毫无价值.
第三方应用程序是硬编码的/dev/tty.
我发现监视通信的一种方法是将/dev/tty设备重命名为,例如,/dev/real_tty并创建一个/dev/tty在其位置调用的命名管道.然后运行:
cat /dev/real_tty | tee /dev/tty &
Run Code Online (Sandbox Code Playgroud)
...至少让我看到输出/dev/real_tty,通过将数据复制/dev/real_tty到命名管道/dev/tty和stdout.
这种工作但它感觉非常狡猾,并依赖于替换设备的技巧.它也不能在两个方向上工作,因为命名管道只在一个方向上传输数据.
这样做的正确方法是什么?
如果有人想知道,TTY设备是微控制器的RS-232链接.信息不敏感或不安全.所有进程(应用程序和间谍)都可以以root身份运行.
我有一个设备会产生一些噪音,我想将它添加到嵌入式Linux系统中/ dev/random设备的熵池中.
我正在阅读/ dev/random上的手册页,我真的不明白你传递给RNDADDENTROPY ioctl调用的结构.
RNDADDENTROPY
Add some additional entropy to the input pool, incrementing
the entropy count. This differs from writing to /dev/random
or /dev/urandom, which only adds some data but does not
increment the entropy count. The following structure is used:
struct rand_pool_info {
int entropy_count;
int buf_size;
__u32 buf[0];
};
Here entropy_count is the value added to (or subtracted from)
the entropy count, and buf is the buffer of size buf_size
which gets …Run Code Online (Sandbox Code Playgroud) 我正在为基于ARM9的平台Olinuxino开发2.6.35内核的修改版本.我正在尝试修改电源管理驱动程序(特定于体系结构的部分).
处理器是飞思卡尔i.MX23.该处理器有一个称为PSWITCH的"特殊"引脚,用于触发由电源管理驱动程序处理的中断.如果按下开关,系统将进入待机状态.这是通过调用在驱动程序中完成的pm_suspend(PM_SUSPEND_STANDBY).
鉴于我的硬件设置,我想关闭系统.所以我的问题是:
内核空间进程触发干净系统暂停/关闭的首选方法是什么?
我想那里有一个很好的小函数调用,但到目前为止我找不到它.
我的内核代码(我正在处理的文件是arch/arm/mach-mx23/pm.c)可以在这里找到:github.com/spairal/linux-for-lobster,虽然我的问题需要一个通用的Linux内核做法.
我正在研究运行嵌入式Linux的系统.我正在尝试从我在套接字上收到的流中获取数据包时间戳.
创建套接字后,我执行以下操作:
if (fd != -1) {
int enabled = 1;
setsockopt(fd, SOL_SOCKET, SO_TIMESTAMP, &enabled, sizeof(enabled);
}
Run Code Online (Sandbox Code Playgroud)
之后我绑定套接字,套接字的类型为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_ioctl);
printf("%ld.%ld - error = %d", (long int)tv_ioctl.tv_sec,
(long int)tv_ioctl.tv_usec, error);
}
Run Code Online (Sandbox Code Playgroud)
printf语句的输出始终如下:
0.0错误= -1
错误= -1表示ioctl调用失败.我已经执行了测试getsockopt以检查是否设置了SO_TIMESTAMP选项,为SO_TIMESTAMP选项getsockopt返回0,因此它似乎正确设置.我在这里有点迷失,我怎么能进一步调查为什么ioctl调用似乎失败了?
摘要
我目前正在使用一些自定义板的自定义驱动程序编译Linux内核(内核,模块和DTB).有时我会编译内核并意识到DTB文件中的兼容性字符串不是自定义驱动程序要查找的内容.现在,我可以解决这个问题的唯一方法是修改DTS或内核驱动程序,使字符串匹配,然后再次重新编译内核.有没有办法我可以编辑DTB文件来更新兼容性字符串?
尝试失败
我已经能够使用以下命令将DTB文件反编译回DTS文件:
dtc -I dtb -o <filename>.dts -<filename>.dtb
Run Code Online (Sandbox Code Playgroud)
但是,如果我修改DTS文件并使用以下命令重新编译:
dtc -I dts -o <filename>.dtb -<filename>.dts
Run Code Online (Sandbox Code Playgroud)
内核不会加载重新编译的DTB文件
我正在使用Yocto编译的Angstrom图像在Tegra 3上运行Qt 5.4.2.不幸的是,Tegra只有专有驱动程序,它们迫使我使用X11进行硬件加速.因此,我不得不用XCB而不是EGLFS构建Qt.
我的问题是我看到设备上的一些QML 2动画在我的电脑上看不到.我想知道我能做些什么来试图摆脱这种撕裂?我已经读过QT_QPA_EGLFS_FORCEVSYNC可能会有所帮助,但不幸的是我无法使用EGLFS并怀疑它是否有用.
编辑:我注意到"QSGContext :: initialize:模板缓冲区支持丢失,期望渲染错误"以及"Qt警告:无法找到系统的Compose文件的位置.考虑设置QTCOMPOSE环境变量." 应用程序启动时出现.他们可能与问题有关吗?
我花了几天时间试图理解,但我被卡住了.在我的STM32F429I-DISC1板上输入'bootm 8100000'后,我得到的只是一个"Starting kernel ..."消息.
在我从2011年到2016年更新uboot之前这是一个"起始内核......"+ UNHANDED EXCEPTION HARDFAULT,但现在我只有"Starting Kernel ..."消息.
MCU是一个stm32F429,2MB Flash + ext.8MB RAM.
Flash start addr是0x08000000(uboot addr),我把我的内核放在第二个闪存库的开头0x08100000.
外部8MB RAM的启动是0xD0000000
u-boot-2016.11似乎在那块板上跑得很好,bdi给我:
U-Boot > bdi
arch_number = 0x00000000
boot_params = 0xD0000100
DRAM bank = 0x00000000
-> start = 0xD0000000
-> size = 0x00800000
current eth = unknown
ip_addr = <NULL>
baudrate = 115200 bps
relocaddr = 0xD07D6000
reloc off = 0xC87D6000
irq_sp = 0xD05D3EE0
sp start = 0xD05D3ED0
Early malloc usage: e0 / 400
Run Code Online (Sandbox Code Playgroud)
这就是我构建内核的方式: …
我正在使用Yocto (Hardknott)构建映像并创建包源(rpm 包)。图像依赖项之一是u-boot-karo(它是 karo 模块的自定义 u-boot),并且此配方似乎与libdnf. 谁能帮我解决这个问题,下面您将在 do_rootfs.log 中找到有关该错误的更多详细信息
NOTE: ###### Generate rootfs #######
NOTE: Executing '/amr-bsp/build/tmp/work/amr1-poky-linux-gnueabi/amr-image-dev/1.0-r0/recipe-sysroot-native/usr/bin/createrepo_c --update -q /amr-bsp/build/tmp/work/amr1-poky-linux-gnueabi/amr-image-dev/1.0-r0/oe-rootfs-repo' ...
NOTE: Running /amr-bsp/build/tmp/work/amr1-poky-linux-gnueabi/amr-image-dev/1.0-r0/recipe-sysroot-native/usr/bin/dnf -v --rpmverbosity=info -y -c /amr-bsp/build/tmp/work/amr1-poky-linux-gnueabi/amr-image-dev/1.0-r0/rootfs/etc/dnf/dnf.conf --setopt=reposdir=/amr-bsp/build/tmp/work/amr1-poky-linux-gnueabi/amr-image-dev/1.0-r0/rootfs/etc/yum.repos.d --installroot=/amr-bsp/build/tmp/work/amr1-poky-linux-gnueabi/amr-image-dev/1.0-r0/rootfs --setopt=logdir=/amr-bsp/build/tmp/work/amr1-poky-linux-gnueabi/amr-image-dev/1.0-r0/temp --repofrompath=oe-repo,/amr-bsp/build/tmp/work/amr1-poky-linux-gnueabi/amr-image-dev/1.0-r0/oe-rootfs-repo makecache --refresh
DEBUG: DNF version: 4.6.0
cachedir: /amr-bsp/build/tmp/work/amr1-poky-linux-gnueabi/amr-image-dev/1.0-r0/rootfs/var/cache/dnf
Added oe-repo repo from /amr-bsp/build/tmp/work/amr1-poky-linux-gnueabi/amr-image-dev/1.0-r0/oe-rootfs-repo
Making cache files for all metadata files.
oe-repo: has expired and will be refreshed.
repo: downloading from remote: oe-repo
oe-repo 343 MB/s | 1.2 MB …Run Code Online (Sandbox Code Playgroud)