标签: kernel

为支持向量机(XOR)设计内核

我的问题的核心是"如何为学习问题设计内核函数?"

作为一个快速的背景,我正在阅读关于支持向量机和内核机器的书籍,我看到作者给出了内核的例子(多项式内核均匀和非均匀,高斯内核,以及基于文本的内核的暗示等等)但是,所有这些都提供了结果的图片而没有指定内核,或者模糊地宣称"可以构造一个有效的内核".我对为新问题设计内核时的过程感兴趣.

可能最简单的例子是学习XOR,这是一个嵌入真实平面的最小(4点)非线性数据集.如何能够提出一个自然(和非平凡)内核来线性分离这些数据?

作为一个更复杂的例子(参见Cristianini,SVM简介,图6.2),如何设计内核来学习棋盘图案?Cristianini声称图片是"使用高斯内核"得出的,但似乎他使用了多个,并且它们以未指定的方式组合和修改.

如果这个问题太宽泛而无法在这里回答,我会理解一个这样的内核函数的构造,尽管我更喜欢这个例子有点简单.

kernel machine-learning svm

21
推荐指数
2
解决办法
8027
查看次数

启用 linux 内核驱动程序 dev_dbg 调试消息

有没有一种最简单的方法来启用 linux 内核驱动程序dev_dbg调试消息(实际上它是一个trace样式消息),希望不会弄乱内核补丁/重新编译或驱动程序实现一些额外的东西debugfs?也许有一种方法可以在内核中启用一些简单的东西(比如一个标志?)触发特定驱动程序或所有驱动程序 dev_dbg(它可以用 `dmesg|grep "driverName" 过滤)输出?

内核版本是4.14. 根本没有syslog/daemonlog/system运行日志。没有网络接口,只有一个串口可用。目标系统非常慢而且非常紧凑,所以没有办法添加 syslog/etc,除了 dmesg 什么都没有,在那里看到这样的行的输出会很好:

dev_dbg(&client->dev, "bla bla bla\n");

不幸的是,一些帖子已经建议debugbootargs内核参数添加关键字还不够。

输出像dev_info进入 dmesg 没有问题,所以它绝对接近。谢谢

linux debugging trace kernel driver

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

使用Linux内核中的模块覆盖功能

在没有深入了解原因的细节的情况下,我正在寻找一种干净(尽可能)的方式来替换可加载模块的内核函数和系统调用.我最初的想法是编写一些代码来覆盖一些函数,这些函数将采用原始函数(如果可能的话,可能会调用函数),然后添加一些我自己的代码.关键是我写的函数必须具有原始函数的名称,因此其他代码在尝试访问它时将访问我的函数.

我可以很容易地(相对地)在内核中直接执行此操作,只需将我的代码放入适当的函数中,但我想知道是否有人知道一点C魔法不一定是可怕的内核(或C)编码实践,可以实现同样的结果.

我想到了#define和typedef的想法,但我不能完全破解它.

简而言之:有没有人知道如何有效地覆盖Linux内核中的函数(来自模块)?

编辑:因为它被问到,我本质上想要从内核中记录某些功能(创建/删除目录等),但为了理智,一个可加载的模块似乎有意义,而不是必须编写一个大补丁内核代码并重新编译每个更改.内核添加的代码量很少,但是我希望将大部分工作卸载到模块中.

c linux kernel module

20
推荐指数
1
解决办法
7068
查看次数

"{{}} while(0)"在内核代码中的作用是什么?

可能的重复:
当我们定义一个宏时,do(0)有什么用?
为什么在C/C++宏中有时会出现无意义的do/while和if/else语句?
C多行宏:do/while(0)vs scope block

我已经看到了很多这样的用法,以前我是程序员想要轻松打破一段代码.为什么我们需要在这里执行while {...} while(0)循环?我们试图告诉编译器一些东西吗?

例如,在Linux内核2.6.25中,包含/ asm-ia64/system.h

/*
 * - clearing psr.i is implicitly serialized (visible by next insn)
 * - setting psr.i requires data serialization
 * - we need a stop-bit before reading PSR because we sometimes
 *   write a floating-point register right before reading the PSR
 *   and that writes to PSR.mfl
 */
#define __local_irq_save(x)         \
do {                    \
    ia64_stop();                \
    (x) = ia64_getreg(_IA64_REG_PSR);   \
    ia64_stop();                \
    ia64_rsm(IA64_PSR_I);           \
} while (0)
Run Code Online (Sandbox Code Playgroud)

c kernel linux-kernel

20
推荐指数
4
解决办法
6026
查看次数

"软/硬nofile"在Linux上意味着什么

当我尝试在RedHat EL5上安装软件时,我得到的错误是软/硬nofile的预期值是4096而默认值是1024.我设法增加了数量,但我不知道参数是什么.他们是指软链接和硬链接吗?

我改变它的方式是:

A)修改/etc/security/limits.conf

user soft nofile 5000
user hard nofile 6000
Run Code Online (Sandbox Code Playgroud)

B)修改/etc/pam.d/system-auth

session required /lib/security/$ISA/pam_limits.so
Run Code Online (Sandbox Code Playgroud)

C)修改/etc/pam.d/login

session required pam_limits.so
Run Code Online (Sandbox Code Playgroud)

进行更改后(通过切换到root).似乎我必须重新启动机器才能使其生效.但是一些网上帖子说它应该在做出改变后立即生效.如果有人能澄清它,我将不胜感激.

linux kernel

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

linux内核中的函数调用者

有没有办法在linux内核中获取函数调用?我知道__ func __返回正在执行的函数名.我正在寻找名为" __ func __ "的函数

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

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

vmsplice()和TCP

在最初的vmsplice()实现中,有人建议如果你有一个用户区缓冲区2x可以容纳管道的最大页数,那么缓冲区后半部分成功的vmsplice()将保证内核完成使用缓冲区的前半部分.

但事实并非如此,特别是对于TCP,内核页面将被保留,直到从另一方接收到ACK.修复这个问题是未来的工作,因此对于TCP,内核仍然需要从管道中复制页面.

vmsplice()有一个SPLICE_F_GIFT选项可以处理这个,但问题是这暴露了另外两个问题 - 如何有效地从内核获取新页面,以及如何减少缓存垃圾.第一个问题是mmap需要内核清除页面,第二个问题是虽然mmap可能会使用内核中的花式kscrubd功能,但这会增加进程的工作集(缓存垃圾).

基于此,我有以下问题:

  • 通知userland关于页面安全重用的当前状态是什么?我特别感兴趣的是将splice()d拼接到套接字(TCP)上.在过去的5年里发生了什么事吗?
  • mmap/ vmsplice/ splice/ munmap目前在TCP服务器中进行零复制的最佳实践还是今天我们有更好的选择?

linux kernel mmap splice zero-copy

20
推荐指数
1
解决办法
3453
查看次数

为什么linux内核使用非标准C(gcc特定功能)编码?

Linux内核代码使用"statement-expression"和typeof扩展,使其只能在gcc下编译.

我想的更多,更没有意义.

它违背了可移植性和标准C的目的.(现在linux内核代码需要一个支持gcc扩展的特定编译器).

这是一个糟糕的设计选择还是有特定的理由让linux内核代码特定于gcc?

编辑:当我说它破坏了可移植性时,我在不同的环境中使用它.我在思考,通过符合标准C,它将被任何支持标准C的编译器所接受(这正是创建标准的目的 - 统一C的所有不同方言),因此更加便携.当然,由于gcc如此受欢迎,并且gcc支持zillion架构,因此这条线几乎毫无意义.我只是问是否有一个特定的理由背后不符合标准C.

c linux gcc kernel

20
推荐指数
4
解决办法
4691
查看次数

Android:通过AOSP源代码创建新的系统权限.

我想知道如何编辑Android操作系统源代码来强加新的权限.例如,我们拥有BLUETOOTH权限,如果设备提供了新的传感器,那么在应用程序级别使用清单条目为android rom中提供的新权限创建权限以便应用程序使用新传感器.

有人知道在AOSP源代码中如何在操作系统级别创建新的权限?

我认为如果我们修改了android源代码来添加新的权限,我们必须编译我们的自定义SDK以便在应用程序开发中使用权限,否则现有的SDK会给出编译时错误,因为它不会识别我们的自定义权限...

任何想法,想法高度赞赏.

permissions android operating-system kernel android-source

20
推荐指数
1
解决办法
6552
查看次数

安装vmware工具:无法识别3.8.0-19通用内核文件的路径

所以我使用Lubuntu并使用vmplayer作为VM运行,我正在尝试安装vmware工具.做完之后

./vmware-install.pl
Run Code Online (Sandbox Code Playgroud)

并且正在进行默认设置

The path "" is not a valid path to the 3.8.0-19-generic kernel headers. 
Would you like to cange it? [yes]

Enter the path to the kernel header files for the 3.8.0-19-generic kernel?
Run Code Online (Sandbox Code Playgroud)

当我做的时候

whereis 3.8.0-19-generic kernel
Run Code Online (Sandbox Code Playgroud)

它说

3.8:
kernel: /usr/src/linux-headers-3.8.0-30/kernel /usr/src/linux-headers-3.8.0-19/kernel  /usr/src/linux-headers-3.8.0-19-generic/kernel /usr/src/linux-headers-3.8.0-30-generic-kernel
Run Code Online (Sandbox Code Playgroud)

我尝试了所有这四个,没有一条路径有效.它仍然说路径不是3.8.0-19通用/内核的有效路径.

请注意,在我做之前

whereis 3.8.0-generic kernel
Run Code Online (Sandbox Code Playgroud)

它只给了我'-19'内核,但后来我做到了

sudo apt-get install linux-headers-$(uname -r)
sudo apt-get install linux-headers-generic
Run Code Online (Sandbox Code Playgroud)

看看它是否会解决任何问题,但事实并非如此.它添加了'-30'内核,但似乎没有解决问题.关于什么是错的任何想法?

install kernel vmware-tools virtual-machine linux-kernel

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