标签: kernel

C#驱动程序开发?

在我一头扎进C#之前......

我一直觉得C或者C++最适合在Windows上开发驱动程序.我不喜欢在.NET机器上开发驱动程序的想法.

但.NET似乎是MS推动应用程序开发的方式,所以我现在想知道:

  • 人们是否正在使用C#来开发驱动程序?
  • 你是否需要做很多API挂钩,或者C#是否具备与内核接口的设施而没有太多的hackery?
  • 任何人都能说出比通常情况更接近环0的C#程序运行的可靠性和安全性吗?

我希望我的设备可以在C#中使用,如果C#中的驱动程序开发成熟,这显然是要走的路,但如果不推荐,我不想在那里花费很多精力.

  • 开始使用简单的虚拟串口驱动程序有哪些好的资源?

-亚当

c# drivers kernel device

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

如何编写Linux驱动模块调用/使用其他驱动模块?

我正在开发一个Linux驱动程序可加载模块,我必须在我的驱动程序中使用另一个设备.(堆叠在另一个驱动程序上的驱动程序的种类)

如何在我的驱动程序中调用/使用其他驱动程序?我认为它们都在内核中,所以可能有一种方法可以直接使用另一个驱动程序.

linux kernel module driver device

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

如何让内核在TCP套接字编程中选择范围(1024,5000)中的端口号

当我运行以下代码时:

struct   sockaddr_in sin;
int addrlen;   
addrlen=sizeof(sin);   
memset(&sin, 0, sizeof(sin));  
sin.sin_family = AF_INET;  
sin.sin_addr.s_addr=inet_addr("123.456.789.112");  
sin.sin_port=htons(0); // so that the kernel reserves a unique port for us  
sd_server = socket(PF_INET, SOCK_STREAM, 0);  
bind(sd_server, (struct sockaddr *) &sin, sizeof(sin));  
getsockname(sd_server,(struct sockaddr*)&sin,&addrlen);  
port=ntohs(sin.sin_port); 
printf("port number = %d\n",port);
Run Code Online (Sandbox Code Playgroud)

根据套接字,我必须得到1024到5000之间的端口号,但是我的端口号大约是30,000.
我该怎么办?

sockets kernel tcplistener tcpclient

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

unlocked_ioctl vs normal ioctl

在我的驱动程序的file_operations结构中,我有:

struct file_operations Fops = {
  read:    device_read,
  write:   device_write,
  unlocked_ioctl:   device_ioctl,
  ...
};
Run Code Online (Sandbox Code Playgroud)

即没有使用ioctl字段.这是否足以避免Big Kernel Lock并在没有任何同步的情况下进入device_ioctl()?或者我是否必须在代码的用户空间部分更改ioctl()调用?

c linux synchronization kernel ioctl

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

我在哪里可以了解Windows内核?

在我作为一名软件工程专业的学生的时候,我已经习惯了足够多的时间来熟悉Linux,以便我对它的工作方式有所了解,但只知道一个操作系统对我来说是短视的.我很想了解Windows的工作方式,虽然我不希望看到它的代码,但我确信有一些文章/学术论文/技术手册至少有一些信息.

您是否了解我可以从中了解Windows内核的良好来源?

windows operating-system kernel

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

在Linux内核版本上递归禁用CONFIG依赖项

配置Linux内核时,我通常从我的发行版的内核配置文件开始.我经常想关闭一些条目,但它们有时是不可更改的,因为启用了依赖于它的其他CONFIG选项.

我可以手动查找依赖项,这些依赖项通常具有自己的依赖项.通过这些操作可能非常耗时,特别是如果您尝试关闭CONFIG_KALLSYMS之类的东西.

问题:有没有办法指定您想要的配置选项,并自动选择/分析所有依赖关系作为nessisary?我查看了所有make选项和scripts目录,但没有看到任何可用的内容.

更新:有人回答说make oldconfig应该从.config文件中删除(删除)所需的CONFIG选项后执行该工作,但这不起作用(他的答案消失了):

$ make oldconfig
scripts/kconfig/conf -o arch/x86/Kconfig
*
* Restart config...
*
*
* Configure standard kernel features (for small systems)
*
Configure standard kernel features (for small systems) (EMBEDDED) [N/y/?] n
  Load all symbols for debugging/ksymoops (KALLSYMS) [Y/?] (NEW) y
    Include all symbols in kallsyms (KALLSYMS_ALL) [Y/?] (NEW) y
    Do an extra kallsyms pass (KALLSYMS_EXTRA_PASS) [N/y/?] (NEW) 
Run Code Online (Sandbox Code Playgroud)

它会自动地说"y"两个前两个,我试图找到一种自动删除它们并让它们消失的方法.

linux configuration kernel makefile

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

Linux内核CONFIG_DEBUG_SECTION_MISMATCH会出错

在Linux内核编译的"make"步骤中,我遇到了很多这样的错误:

Building modules, stage 2.
MODPOST 2283 modules
WARNING: modpost: Found 1 section mismatch(es).
To see full details build your kernel with:
'make CONFIG_DEBUG_SECTION_MISMATCH=y'
Run Code Online (Sandbox Code Playgroud)

我知道我可以做一个make CONFIG_DEBUG_SECTION_MISMATCH=y并继续它,但我想知道是否有更好的方法来处理它.也许向别人报告或我如何解决这些问题,等等.

linux kernel

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

从Linux内核发送UDP数据包

即使已经存在类似的话题,我也注意到它的历史可以追溯到两年前,因此我认为开一个新主题更合适......

我试图弄清楚如何从Linux内核(3.3.4)发送UDP数据包,以监控随机数生成器(/drivers/char/random.c)的行为.到目前为止,由于sock_create和sock_sendmsg函数,我设法监视了一些事情.您可以在此消息的末尾找到我使用的典型代码.(您可能还想在此处下载完整的修改后的random.c文件.)

通过在适当的random.c函数中插入此代码,我能够为每次访问/ dev/random和/ dev/urandom发送UDP数据包,并且随机数生成器使用的每个键盘/鼠标事件都可以收集熵.但是,当我尝试监视磁盘事件时,它根本不起作用:它在引导期间生成内核崩溃.

因此,这是我的主要问题:您是否知道为什么我的代码在插入磁盘事件函数时会导致如此多的麻烦?(add_disk_randomness)

或者,我已经读过netpoll API,它应该处理这种UDP-in-kernel问题.不幸的是我还没有发现任何相关的文件除了从2005年相当有趣,但过时的红帽介绍你觉得我应该相当使用这个API?如果有,你有什么例子吗?

任何帮助,将不胜感激.提前致谢.

PS:这是我的第一个问题,所以请不要犹豫,告诉我,如果我做错了什么,我会记住以后的问题:)


#include <linux/net.h>
#include <linux/in.h>
#include <linux/netpoll.h>
#define MESSAGE_SIZE 1024
#define INADDR_SEND ((unsigned long int)0x0a00020f) //10.0.2.15
static bool sock_init;
static struct socket *sock;
static struct sockaddr_in sin;
static struct msghdr msg;
static struct iovec iov;

[...]

int error, len;
mm_segment_t old_fs;
char message[MESSAGE_SIZE];

if (sock_init == false)
{
  /* Creating socket */
  error = sock_create(AF_INET, SOCK_DGRAM, IPPROTO_UDP, &sock);
  if (error<0)
    printk(KERN_DEBUG "Can't create socket. Error …
Run Code Online (Sandbox Code Playgroud)

linux kernel udp linux-kernel

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

Linux内核代码中的EXPORT_SYMBOL_GPL是什么?

Linux内核代码中的EXPORT_SYMBOL_GPL是什么?

下面是一段代码,其中包含EXPORT_SYMBOL_GPL

62 struct resource *platform_get_resource(struct platform_device *dev,
 63                                        unsigned int type, unsigned int num)
 64 {
 65         int i;
 66 
 67         for (i = 0; i < dev->num_resources; i++) {
 68                 struct resource *r = &dev->resource[i];
 69 
 70                 if (type == resource_type(r) && num-- == 0)
 71                         return r;
 72         }
 73         return NULL;
 74 }
 75 EXPORT_SYMBOL_GPL(platform_get_resource);
Run Code Online (Sandbox Code Playgroud)

该宏在内核代码中多次出现......

linux macros kernel kernel-module linux-kernel

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

为什么在内核编程中使用u8 u32 u64 u64而不是unsigned int

我看到内核代码中使用的u8 u16 u64 u64数据类型.我想知道为什么会出现需要使用u8u16u32u64unsigned int

c linux kernel linux-device-driver

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