标签: linux-kernel

arm-eabi arm-gnueabi和gnueabi-hf编译器之间的区别

arm-eabi,gnueabi和gnueabi-hf交叉编译器有什么区别.我发现很难选择编译器.是否有针对arm的本机编译器?

linux gcc arm linux-device-driver linux-kernel

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

在Linux下签名的可执行文件

出于安全原因,希望在执行之前检查代码的完整性,避免攻击者篡改软件.所以,我的问题是

如何在Linux下签署可执行代码并仅运行可信软件?

我读过van Doom 等人的着作.,设计和实现Linux的签名可执行文件,以及Safford&Zohar 的IBM TLC(可信Linux客户端).TLC使用TPM控制器,这很好,但该文件来自2005年,我无法找到当前的替代品.

你知道其他选择吗?

更新:关于其他操作系统?OpenSolaris的?BSD家庭?

linux security linux-kernel trusted-computing

35
推荐指数
4
解决办法
3万
查看次数

谁调用了驱动程序的probe()

如何probe()调用电话?谁叫它?根据我的理解,__init()寄存器driver然后以某种方式probe()被调用到register设备数据irq等.它究竟发生了什么?

我正在研究触摸屏驱动程序及其__init注册本身i2c driver.然后探测期望i2c_client数据返回null.我想跟踪它被填满的地方.

linux-device-driver linux-kernel

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

什么是'asmlinkage'修饰符意味着什么?

我已经读过它用于在Linux中实现系统调用的函数.例如:

asmlinkage long sys_getjiffies( void )
{
  return (long)get_jiffies_64();
}
Run Code Online (Sandbox Code Playgroud)

并告诉编译器传递堆栈上的所有函数参数.但事实并非如此吗?函数参数通常只通过在堆栈上推送它们来传递.或者我们指的是通过寄存器传递函数参数?

c assembly linux-kernel

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

__read_mostly,__ init,__ exit宏的很好的解释

宏观扩张__read_mostly:

#define __read_mostly __attribute__((__section__(".data..read_mostly"))
Run Code Online (Sandbox Code Playgroud)

这个来自 cache.h

__init:

#define __init          __section(.init.text) __cold notrace
Run Code Online (Sandbox Code Playgroud)

init.h

__exit:

#define __exit          __section(.exit.text) __exitused __cold notrace
Run Code Online (Sandbox Code Playgroud)

在通过网络搜索后,我没有找到任何关于那里发生的事情的好解释.

附加问题:我听说过内核开发中使用的各种"链接器魔术".任何有关这方面的信息都会很精彩.

我对这些宏的一些想法,他们做什么.就像__init假设初始化后可以删除功能代码一样.__read_mostly用于指示数据很少被写入,并且由此最小化缓存未命中.但我不知道他们是如何做到的.我的意思是他们是gcc扩展.因此理论上它们可以通过小型用户区域代码进行演示.

更新1:

我试图__section__用任意部分名称测试.测试代码:

#include <stdio.h>

#define __read_mostly __attribute__((__section__("MY_DATA")))

struct ro {
    char a;
    int b;
    char * c;
};

struct ro my_ro  __read_mostly = {
    .a = 'a',
    .b = 3,
    .c = NULL,
};


int main(int argc, char **argv) { …
Run Code Online (Sandbox Code Playgroud)

c gcc linux-kernel

35
推荐指数
2
解决办法
9572
查看次数

配置ARP时效超时

我正在尝试配置ARP年龄超时.我想我应该设置/proc/sys/net/ipv4/neigh/default/base_reachable_time_ms所需的超时.但是,尽管我将其设置为30000毫秒(30秒),但仍需要将近10分钟才能从ARP缓存中删除条目.在阅读了几篇文章后,我发现还有更多的设置会影响超时:

/proc/sys/net/ipv4/neigh/default/gc_interval
/proc/sys/net/ipv4/neigh/default/gc_stale_time
/proc/sys/net/ipv4/route/gc_interval
/proc/sys/net/ipv4/route/gc_timeout
Run Code Online (Sandbox Code Playgroud)

我不知道该为这些程序编程.该gc_timeout默认为在Linux下5分钟.我把它改为30秒,但我仍然没有看到条目被移除base_reachable_time/23*base_reachable_time/2.

如何设置ARP缓存的到期时间?

linux arp linux-kernel

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

与`mknod`相反的是什么?

我正在学习从内核模块编程指南编写字符设备驱动程序,并用于mknod创建一个节点/dev以与我的驱动程序通信.

但是,在检查联机帮助页并观察这rmnod是一个不存在的命令之后,我找不到任何明显的删除方法.

什么是扭转效果mknod并正确删除创建的节点的正确方法/dev

command-line kernel-module linux-device-driver linux-kernel mknod

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

检测宏中的整数常量表达式

Linux内核邮件列表中讨论了一个宏,该宏测试其参数是否为整数常量表达式,并且本身是一个整数常量表达式.

Martin Uecker提出的一种不使用内置函数的特别聪明的方法(从glibc的tgmath.h中获取灵感)是:

#define ICE_P(x) (sizeof(int) == sizeof(*(1 ? ((void*)((x) * 0l)) : (int*)1)))
Run Code Online (Sandbox Code Playgroud)

1如果参数是整数常量表达式,0则此宏扩展为值的整数常量表达式,否则.但是,它依赖于sizeof(void)允许(和不同于sizeof(int)),这是一个GNU C扩展.

是否可以在没有内置函数的情况下编写这样的宏而不依赖于语言扩展?如果是,它会评估其论点吗?


有关上面显示的宏的解释,请参阅:Linux Kernel的__is_constexpr宏

c macros linux-kernel language-lawyer

35
推荐指数
2
解决办法
8290
查看次数

/ proc/[pid]/io中的计数器是什么意思?

我正在为Munin创建一个插件来监控命名进程的统计信息.其中一个信息来源是/proc/[pid]/io.但我很难找出rchar/ wcharread_bytes/ 之间的区别written_bytes.

它们不一样,因为它们提供不同的值.它们代表什么?

linux linux-kernel procfs

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

哪个C版本在Linux内核中使用?

Linux内核是仅使用旧的C90语法还是使用C99/C11功能进行了优化?

我想知道是否尽可能使用最新版本的C.

linux-kernel

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