小编Kat*_*och的帖子

用户空间与内核空间驱动程序

我正在寻找一个PWM驱动程序.我知道有两种方法可以控制硬件驱动程序:

  1. 用户空间驱动程序
  2. 内核空间驱动程序

如果一般(不考虑PWM驱动程序的情况),我们必须决定是去用户空间还是内核空间驱动程序.那么除了这些因素我们还要考虑哪些因素?

  1. 用户空间驱动程序可以直接将mmap()/ dev/mem内存存储到其虚拟地址空间,无需上下文切换.
  2. 用户空间驱动程序不能实现中断处理程序(它们必须轮询中断).
  3. 用户空间驱动程序无法执行DMA(因为可以从内核空间分配具有DMA功能的内存).

linux linux-device-driver linux-kernel embedded-linux

30
推荐指数
2
解决办法
2万
查看次数

Qdebug显示十六进制值

我试图使用十六进制格式的QDebug显示一个数字.下面是我写的代码.它正在工作,但输出的字符串内容用双引号括起来:

如何删除这些报价?

m_CanMsg_ptr->id = 0x720;
m_CanMsg_ptr->sizeData = 1;
m_CanMsg_ptr->data[0] = 0x05;

MessageID.setNum(m_CanMsg_ptr->id,16);
DataSize  = QString("%1").arg(m_CanMsg_ptr->sizeData, 0, 16);
data      = QString("%1").arg(m_CanMsg_ptr->data[0], 0, 16)

qDebug() << "Heart-Beat : Msg ID = " << MessageID << "  Msg DLC = " << DataSize;
qDebug() << "Msg Data " << " = " << data;
Run Code Online (Sandbox Code Playgroud)

我根据这些资源做了:

http://forum.qt.io/topic/5003/moved-how-to-display-a-local-variable-in-hex-when-debugging-a-qt-app/2 http://qt.shoutwiki .COM /维基/ Convert_hexadecimal_to_decimal_and_vice-versa_in_Qt

在此输入图像描述

qt qdebug

15
推荐指数
5
解决办法
3万
查看次数

__attribute __(packed)v/s GCC __attribute __((aligned(x))

以下GCC __attribute__(packed )将打包到字节边界,对齐用于以下目的: -

u8 rx_buf[14] __attribute__((aligned(8)));  
struct S { short f[3]; } __attribute__ ((aligned (8)));
Run Code Online (Sandbox Code Playgroud)

上面的数组将是16字节,我是对的.

意味着sizeof(rx_buff)将是16字节..即结束时2字节对齐

c gcc

12
推荐指数
1
解决办法
2万
查看次数

什么是MIPS首字母缩略词中的"互锁管道"?

我正在经历一个MIPS处理器架构.

根据本教程,它指出:没有互锁管道阶段的微处理器 http://en.wikipedia.org/wiki/MIPS_architecture

流水线操作的一个主要障碍是某些指令(如除法)需要更长的时间才能完成,因此CPU必须等待将下一条指令传递到流水线之前.
该问题的一个解决方案是使用一系列互锁,允许阶段指示它们正忙,暂停上游的其他阶段.
Hennessy的团队认为这些联锁是主要的性能障碍,因为他们必须与CPU中的所有模块进行通信,这需要时间,并且似乎限制了时钟速度.
MIPS设计的一个主要方面是将所有指令的每个子阶段(包括高速缓存访​​问)都安装到一个周期中,从而消除了对互锁的任何需求,并允许单周期吞吐量.

这个链接说:--- https://www.cs.tcd.ie/Jeremy.Jones/vivio/dlx/dlxtutorial.htm

issue a "stall" instruction instead of a nop instruction upon a stall
Run Code Online (Sandbox Code Playgroud)

Interlock Pipeline到底有什么缺点?
为什么路由器更喜欢采用MIPS架构的处理器?

mips

8
推荐指数
1
解决办法
1万
查看次数

Flattened设备树有什么用 - Linux Kernel

我正在经历Uboot和内核启动过程.FDT(平面设备树)的用途究竟是什么?

许多链接我已经读过他们声明uboot以FDT的形式将板和SOC配置信息传递给内核

https://wiki.freebsd.org/FlattenedDeviceTree

为什么内核需要板配置信息?

我问这个问题,因为当我们在linux中创建设备驱动程序时,我们使用probe()或module_init()调用初始化设备并使用request_mem_region()和ioremap()函数来获取地址范围然后设置时钟和其他司机登记.
request_mem_region()实际上做什么以及何时需要它?

现在,如果我的片上和片上器件的设备驱动程序正在进行全板初始化.
那么flattened device tree内核的用途是什么?

linux-device-driver linux-kernel u-boot device-tree

7
推荐指数
1
解决办法
6960
查看次数

ARM Thumb/Thumb-2性能

我正在使用具有Thumb-2指令集的ARM Cortex-M3控制器.

Thumb模式用于将指令压缩为16位大小.因此减少了代码的大小.但是对于普通的Thumb模式,为什么说性能会降低?

对于Thumb-2,据说根据这两个链接改进了性能:

在单个16位指令限制编译器可用的函数的情况下,可以提高性能.

Thumb-2的既定目标是实现类似于Thumb的代码密度,其性能类似于32位内存上的ARM指令集.

这个表现究竟是什么?有人可以提供一些与之相关的例子吗?

arm cortex-m3

6
推荐指数
2
解决办法
6211
查看次数

fedora linux ---编译第一个linux模块

在Fedora linux中编译我的第一个内核模块时出错.

源代码 : -

#include <linux/module.h>       /* Needed by all modules */
#include <linux/kernel.h>       /* Needed for KERN_INFO */
#include <linux/init.h>         /* Needed for the macros */
static int __init hello_start(void)
{
printk(KERN_INFO "Loading hello module...\n");
printk(KERN_INFO "Hello world\n");
return 0;
}
static void __exit hello_end(void)
{
printk(KERN_INFO "Goodbye Mr.\n");
}
module_init(hello_start);
module_exit(hello_end);
Run Code Online (Sandbox Code Playgroud)

Makefile:----

obj-m = hello.o
KVERSION = $(shell uname -r)
all:
    make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules
clean:
    make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean
Run Code Online (Sandbox Code Playgroud)

制作时错误: -

$ make
make …
Run Code Online (Sandbox Code Playgroud)

linux fedora linux-device-driver embedded-linux

5
推荐指数
1
解决办法
4507
查看次数

node.js脚本 - websocket错误

我在windows-7 PC上安装了node.js. 我无法创建到远程服务器的websocket连接.

我试图在我的脚本中加载modeule"ws": -

var WebSocket = require('ws')
Run Code Online (Sandbox Code Playgroud)

它给出了一个错误: -

cannot find module 'ws'
Run Code Online (Sandbox Code Playgroud)

所以我按照这里的说明进行操作: -
安装了node.js websocket模块,但不能在脚本中使用

Execute cmd as Administrator (Right click cmd icon-> Run as Administrator) Then type in cmd:

c:\Node Instalation Dir\> npm install -g express
c:\Node Instalation Dir\> npm install websocket --force

Then run my script :--
D:\My Script Folder \> node myscript.js
Run Code Online (Sandbox Code Playgroud)

同样的错误.可能是什么问题呢 ?

cannot find module 'ws'
Run Code Online (Sandbox Code Playgroud)

javascript node.js

5
推荐指数
2
解决办法
2万
查看次数

malloc&calloc

按照:

calloc(20, sizeof(int))
malloc(20 * sizeof(int))
Run Code Online (Sandbox Code Playgroud)

这将为20个整数分配内存.

malloc()calloc()分配虚拟或物理连续的空间?

c linux

4
推荐指数
2
解决办法
300
查看次数

将进程作为守护进程运行——update-rc.d 失败

我正在尝试将进程作为守护进程运行

为什么 update-rc.d 失败 ?

当我使用update-rc.d命令更新 init.d 目录中的脚本时。我收到以下错误。

$ update-rc.d vscpd_startup_script defaults
update-rc.d: using dependency based boot sequencing
insserv: can not remove(../rc0.d/K01fake-hwclock): Permission denied
insserv: can not symlink(../init.d/fake-hwclock, ../rc0.d/K02fake-hwclock): Permission denied
insserv: can not remove(../rc0.d/K08umountroot): Permission denied
insserv: can not symlink(../init.d/umountroot, ../rc0.d/K09umountroot): Permission denied
insserv: can not remove(../rc0.d/K02sendsigs): Permission denied
insserv: can not symlink(../init.d/sendsigs, ../rc0.d/K03sendsigs): Permission denied
insserv: can not remove(../rc0.d/K04umountnfs.sh): Permission denied
insserv: can not symlink(../init.d/umountnfs.sh, ../rc0.d/K05umountnfs.sh): Permission denied
insserv: can not remove(../rc0.d/K03rsyslog): Permission denied
insserv: can …
Run Code Online (Sandbox Code Playgroud)

linux embedded-linux

3
推荐指数
1
解决办法
7605
查看次数