小编Edw*_*rdH的帖子

BSP与设备驱动程序

虽然理解每一个(或许不是),但看起来我远远不了解两者之间的实际差异.

根据我的理解,BSP是一个驱动程序和配置设置包,允许内核映像启动板(并且是其中的一部分).单个设备驱动程序在特定组件(HW)上运行,一侧与核心内核连接,另一侧与设备本身连接.

看看Linux内核,我不清楚BSP角色的起源和设备驱动程序角色的结束位置.具体来说,我习惯于每个图像每个板看到一个BSP,但是,通用Linux内核可以加载到具有相同图像的任何架构系列(很明显,对于不同的系列,有不同的图像:x86,amd64,arm, etc ...),其中特定的板和外围设备驱动程序是从initrd按需加载的.

常见的Linux内核发行版是否有BSP?或者BSP是否与特殊案例板相关?

这种行为在其他内核上是否相似?VxWorks的?

最后一个,合并不同的BSP/s以生成适合不同电路板的单个图像是很常见的吗?

vxworks bsp device-driver linux-device-driver

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

在Linux内核中读写原子操作实现

最近,我已经深入研究了原子读写的Linux内核实现,并提出了一些问题.

首先是ia64架构的相关代码:

typedef struct {
    int counter;
} atomic_t;

#define atomic_read(v)      (*(volatile int *)&(v)->counter)
#define atomic64_read(v)    (*(volatile long *)&(v)->counter)

#define atomic_set(v,i)     (((v)->counter) = (i))
#define atomic64_set(v,i)   (((v)->counter) = (i))
Run Code Online (Sandbox Code Playgroud)
  1. 对于读取和写入操作,似乎采用直接方法来读取或写入变量.除非在某处有另一个技巧,否则我不明白这个操作在汇编域中是否具有原子性的保证.我想一个明显的答案是,这样的操作转换为一个程序集操作码,但即便如此,在考虑不同的内存缓存级别(或其他优化)时,如何保证?

  2. 在读取宏上,volatile类型用于转换技巧.任何人都知道这会如何影响这里的原子性?(注意,它不用于写操作)

c atomic volatile linux-kernel

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

静态与非静态函数 - 调试嵌入式系统上下文

我对以下问题感到困惑:如何保持"静态"标签的优势,但仍然能够在现场调试生产代码?

一旦发生意外行为发生在客户站点,并且仅在那里发生.在许多情况下,可以选择执行调试可以节省大量精力并提供非常快速的响应.这样的调试通常涉及检查函数行为,这使我们进入"静态"定义.

无法从调试shell调试静态函数,例如放置断点或执行它.另一方面,将所有函数定义为public会导致代码结构和优化悲伤.

我知道有一些选项,比如编译至少两个不同的版本,一个是静态的,一个是没有,但是这很适合自动化测试,而不是最终的生产版本.

我们会从您这里获得一些见解,主要是关于您如何解决(如果有的话)这种困境.或者将问题改为:" 什么更重要? "

这里对C中"静态"的讨论很好.

c embedded debugging static

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