Articles of kernel

使用驱动程序获取原始MAC地址

Linux:uname -a:2.6.18以及2.6.39 我是非常新的…当驱动程序第一次加载时,ifconfig可以改变MAC地址之前,现有的(永久)MAC地址被存储,可以通过这个ioctl检索。 case ETHTOOL_GPERMADDR: rc = ethtool_get_perm_addr(dev, useraddr); break; 任何人都testing过它? 我可以获得代码或代码的一部分来实现它吗?

系统+ usleep +multithreading= SEGV / SIGILL

我正在使用内核版本2.6.10和“普通”C. 我已经缩小到两个线程为什么我们的程序崩溃。 定时器线程 void TimerThread(void) { while (exec) { usleep(10000); RSLTCD r = SUCCESS; // r = LockMutex(Mtx); do { // some process } while(1); // r = UnlockMutex(Mtx); } return ; // Not Reached } 系统线程 void SystemThread(void) { CreateThread(TimerThread, OALTHRD_DEFAULT_STACKSIZE, THREADPRI_NORMAL, 0, 0); for(;;){ system("echo this is a SYSTEM CALL 1"); system("echo this […]

如何检查内核是否为android或linux?

我有一个内核的源代码。 但是我不知道内核是android内核还是Linux内核。 我已经在谷歌search,但我还没有find任何正确的答案。 据我所知,android内核是Linux内核,并在其上应用了一些补丁。 所以我认为我们可以确定内核是针对Linux还是android。 1.我可以通过查看源代码,或通过运行任何命令或其他方法来了解这一点吗? 2.如果是android内核,是否可以挂载Ubuntu文件系统?

是否有可能写一个字符驱动程序而不使用file_operations结构?

我不知道是否有一种方法来写入字符驱动程序,而不使用file_operations结构中提供的任何函数。 我对Linux设备驱动程序非常陌生 ,任何新手都会这样做,我开始阅读LDD3书籍。 我成功地写了一个简单的字符驱动程序。 include<linux/module.h> #include<linux/kernel.h> #include<linux/fs.h> #include<linux/cdev.h> #include<linux/semaphore.h> #include<linux/uaccess.h> int chardev_init(void); void chardev_exit(void); static int device_open(struct inode *, struct file *); static int device_close(struct inode *, struct file *); static ssize_t device_read(struct file *, char *, size_t , loff_t *); static ssize_t device_write(struct file *, const char *, size_t, loff_t *); static loff_t device_lseek(struct […]

虚拟到内核逻辑地址

我有一个字符驱动程序,其中我添加的接口函数之一是alloc_contig(int order) ,其中订单是所需数量的4K页的log2。 该函数分配连续的物理内存,并使用remap_pfn_range函数将其映射到用户空间使用情况。 我试图编写函数释放这个内存dealloc_contig(va)现在在内核我有虚拟地址给用户释放,我需要获得底层的物理地址,所以我试图使用virt_to_phys但它不给我所需的地址。 日志: //allocating page address is ffff880868764000 //allocated using alloc_pages //deallocating virtual address from user 7f4c7e095000 when converted to PA using virt_to_phys got f74c7e095000 instead of ffff880868764000 你能帮我么?

在MIPS Linux中追溯时,GDB如何find函数的符号?

我试图实现一个函数来回溯在内核中崩溃的用户空间进程。 因为我在Kernel工作,所以没有任何库的function,而且提供的backtracefunction不支持MIPS架构。 我只是想知道我是否可以模仿GDB做什么。 内核的版本是2.6.21。

在自定义的linux内核系统调用中强制执行代码段

我一直在试图实施一个linux system_call一直给我的问题,我怀疑这是因为没有locking(或可能抢占)与我的代码进行。 我有一个非常频繁调用的函数(每次调用system_call时会调用此自定义函数)中的一个关键部分,并且它也由system_calls启动/停止。 有什么方法可以确保每次在Linux内核中进行系统调用时发生的这个关键段都是不可抢占的,并且必须在发生其他任何事情之前完成执行?

定期线程在Xenomai中实时失败

我正在创build一个周期线程,在模拟输出上输出一个方形信号。 我使用Xenomai API的Posix Skin和Analogy。 我使用示波器testing了我的代码的实时性能,并查看了方波信号(频率为1kHz)上的延迟。 我应该达到<100us的延迟。 然而,信号强烈(> 250us的延迟)扰动常见的中断信号,如移动鼠标,开始一个新的程序,等等 我的makefile中的标志是这样设置的: gcc -I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -D__XENO__ -I/usr/xenomai/include/posix main_posix.c -Xlinker -rpath -Xlinker /usr/xenomai/lib -Wl,@/usr/xenomai/lib/posix.wrappers -L/usr/xenomai/lib -lpthread_rt -lxenomai -lpthread -lrt -lanalogy -lrtdm -o main_posix 这是代码: #define PERIOD 1e6 #define FILENAME "analogy0" #define ANALOG_SUBD 1 #define CHANNEL 0 #define SCAN_SIZE 2 #define DELAI 5 static char *filename = FILENAME; static […]

Linux内核的ftrace irqsoff跟踪器产生奇怪的输出

我正在分析我的系统中的中断延迟(飞思卡尔ARM MX6Q与Linux内核版本3.0.35),我正在使用irqsoff示踪剂,这是我得到的最大irqclosures延迟输出: # tracer: irqsoff # # irqsoff latency trace v1.1.5 # ——————————————————————– # latency: 2770 us, #89/89, CPU#0 | (M:preempt VP:0, KP:0, SP:0 HP:0 #P:4) # —————– # | task: swapper-0 (uid:0 nice:0 policy:0 rt_prio:0) # —————– # => started at: tick_oneshot_mode_active # => ended at: default_idle # # # _——=> CPU# # / […]

应该使用哪个kmalloc标志

我一直在寻找一个解释何时使用kmalloc的每个标志的文档。 我发现这个参考 ,这相当解释什么时候使用一些标志,但我找不到GFP_HIGHUSER_PAGECACHE,GFP_HIGHUSER_MOVABLE和其他标志在gfp.h头文件中的其他标志…有人可以告诉我何时使用这些其他标志?