arm-eabi,gnueabi和gnueabi-hf交叉编译器有什么区别.我发现很难选择编译器.是否有针对arm的本机编译器?
出于安全原因,希望在执行之前检查代码的完整性,避免攻击者篡改软件.所以,我的问题是
如何在Linux下签署可执行代码并仅运行可信软件?
我读过van Doom 等人的着作.,设计和实现Linux的签名可执行文件,以及Safford&Zohar 的IBM TLC(可信Linux客户端).TLC使用TPM控制器,这很好,但该文件来自2005年,我无法找到当前的替代品.
你知道其他选择吗?
更新:关于其他操作系统?OpenSolaris的?BSD家庭?
如何probe()调用电话?谁叫它?根据我的理解,__init()寄存器driver然后以某种方式probe()被调用到register设备数据irq等.它究竟发生了什么?
我正在研究触摸屏驱动程序及其__init注册本身i2c driver.然后探测期望i2c_client数据返回null.我想跟踪它被填满的地方.
我已经读过它用于在Linux中实现系统调用的函数.例如:
asmlinkage long sys_getjiffies( void )
{
return (long)get_jiffies_64();
}
Run Code Online (Sandbox Code Playgroud)
并告诉编译器传递堆栈上的所有函数参数.但事实并非如此吗?函数参数通常只通过在堆栈上推送它们来传递.或者我们指的是通过寄存器传递函数参数?
宏观扩张__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) 我正在尝试配置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/2或3*base_reachable_time/2.
如何设置ARP缓存的到期时间?
我正在学习从内核模块编程指南编写字符设备驱动程序,并用于mknod创建一个节点/dev以与我的驱动程序通信.
但是,在检查联机帮助页并观察这rmnod是一个不存在的命令之后,我找不到任何明显的删除方法.
什么是扭转效果mknod并正确删除创建的节点的正确方法/dev?
command-line kernel-module linux-device-driver linux-kernel mknod
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宏
我正在为Munin创建一个插件来监控命名进程的统计信息.其中一个信息来源是/proc/[pid]/io.但我很难找出rchar/ wchar和read_bytes/ 之间的区别written_bytes.
它们不一样,因为它们提供不同的值.它们代表什么?
Linux内核是仅使用旧的C90语法还是使用C99/C11功能进行了优化?
我想知道是否尽可能使用最新版本的C.