我想许多开发人员喜欢在帮助下调查来源git gui blame
.正如在Linux-2.6.12-rc2的提交中所解释的那样(也在Github上镜像),它需要有专门的历史Linux存储库用于此目的.
Linux的2.6.12-RC2
最初的git存储库构建.即使我们拥有它,我也不会厌倦完整的历史.如果我们想要的话,我们可以创建一个单独的"历史"git存档,同时当导入到git时它大约是3.2GB - 这会让早期的git日不必要地变得复杂,当我们没有很多良好的基础设施.
让它撕裂!
我已经查看了很多准备好的历史存储库但是我没有找到包含更改的版本返回到零版本,所以我放弃了,我在这里问这个问题.
我正在尝试编写一个使用netlink与用户进程通信的linux内核模块.我正在使用netlink,因为我想要通信的用户程序只使用套接字进行通信,我无法改变它来添加ioctl()
或任何东西.
问题是我无法弄清楚如何做到这一点.我用Google搜索,但我发现所有的例子都是老喜欢这一个,不再适用于当前的内核版本.我也看了这个问题,但这里的示例使用libnl进行套接字操作,但我想坚持使用标准套接字函数(定义sys/socket.h
).那么有些人可以在这里指导我一些教程或指南或一些可以帮助我理解netlink的界面和用法的东西.我非常感谢一个工作示例,没什么特别的,只是一个非常基本的例子,说明如何建立从用户程序中的套接字到内核中的套接字的连接,然后将数据从用户进程发送到内核并从内核接收回来.
另请不要告诉我查看内核代码.我已经在做了,但这需要花费很多时间,而且我没有留下很多东西.
更新:
经过大量的试验和错误后,我有以下代码将消息从用户程序发送到内核,但是从内核到用户程序的消息即使用netlink_unicast()
不起作用.它不仅没有工作,呼叫挂起系统,然后我必须重新启动机器.有人可以看看,告诉我我在做什么错.该netlink_unicast()
调用在以下代码中进行了注释.它应该是内核到用户程序消息的未注释.
#include <sys/socket.h>
#include <linux/netlink.h>
#define NETLINK_USER 31
#define MAX_PAYLOAD 1024 /* maximum payload size*/
struct sockaddr_nl src_addr, dest_addr;
struct nlmsghdr *nlh = NULL;
struct iovec iov;
int sock_fd;
struct msghdr msg;
void main()
{
sock_fd=socket(PF_NETLINK, SOCK_RAW, NETLINK_USER);
if(sock_fd<0)
return -1;
memset(&src_addr, 0, sizeof(src_addr));
src_addr.nl_family = AF_NETLINK;
src_addr.nl_pid = getpid(); /* self pid */
/* interested in group 1<<0 */
bind(sock_fd, …
Run Code Online (Sandbox Code Playgroud) 我正在为linux内核编写一个模块,我想在init函数中创建一些设备节点
int init_module(void)
{
Major = register_chrdev(0, DEVICE_NAME, &fops);
// Now I want to create device nodes with the returned major number
}
Run Code Online (Sandbox Code Playgroud)
我还希望内核为我的第一个节点分配一个次要编号,然后我将自己分配其他节点的次要编号.
我怎么能在代码中执行此操作.我不想使用mknod从shell创建设备
最近,我的Linux机器上的tomcat进程突然被杀死.调查后,我在/ var/log/messages文件中找到以下错误消息:
kernel: [1799319.246494] Out of memory: Kill process 28536 (java) score 673 or sacrifice childSep kernel: [1799319.246506] Killed process 28536 (java) total-vm:1271568kB, anon-rss:426528kB, file-rss:0kB
现在,有人可以告诉我所有内容包括在内total-vm
以及如何anon-rss
与众不同rss
?
如何在Debian主机上运行docker可能是容器中的OpenSUSE?它使用不同的内核,具有独立的模块.旧的Debian版本也使用了较旧的内核,那么如何在内核版本3.10+上运行呢?较旧的内核只有较旧的内置函数,旧的发行版如何管理新功能?什么是"诀窍"呢?
我正在尝试直接访问嵌入式Linux项目的物理内存,但我不确定如何最好地为我的内容指定内存.
如果我定期启动我的设备,并访问/ dev/mem,我可以轻松地读取和写入我想要的任何地方.但是,在这里,我正在访问可以轻松分配给任何进程的内存; 这是我不想做的
我的/ dev/mem代码是(所有错误检查等删除):
mem_fd = open("/dev/mem", O_RDWR));
mem_p = malloc(SIZE + (PAGE_SIZE - 1));
if ((unsigned long) mem_p % PAGE_SIZE) {
mem_p += PAGE_SIZE - ((unsigned long) mem_p % PAGE_SIZE);
}
mem_p = (unsigned char *) mmap(mem_p, SIZE, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_FIXED, mem_fd, BASE_ADDRESS);
Run Code Online (Sandbox Code Playgroud)
这很有效.但是,我想使用其他人无法触及的记忆.我已经尝试通过使用mem = XXXm启动来限制内核看到的内存量,然后将BASE_ADDRESS设置为高于该值(但低于物理内存),但它似乎并不是一致地访问相同的内存.
根据我在网上看到的内容,我怀疑我可能需要一个使用ioremap()或remap_pfn_range()(或两者兼而有之)的内核模块(可以),但我完全不知道如何; 有人可以帮忙吗?
编辑:我想要的是一种总是访问相同物理内存(比如,1.5MB)的方法,并将该内存放在一边,以便内核不会将其分配给任何其他进程.
我正在尝试重现我们在其他操作系统中的系统(没有内存管理),我可以通过链接器在内存中分配一个空间,并使用类似的方式访问它
*(unsigned char *)0x12345678
Run Code Online (Sandbox Code Playgroud)
EDIT2:我想我应该提供更多细节.此内存空间将用于RAM缓冲区,以用于嵌入式应用程序的高性能日志记录解决方案.在我们拥有的系统中,在软重启期间没有什么可以清除或扰乱物理内存.因此,如果我向物理地址X写入一个位并重新启动系统,则重新启动后仍将设置相同的位.这已经在运行VxWorks的完全相同的硬件上进行了测试(这种逻辑在不同平台上的Nucleus RTOS和OS20上也很好用,FWIW).我的想法是通过直接解决物理内存在Linux中尝试相同的事情; 因此,每次启动时都必须获得相同的地址.
我应该澄清这是针对内核2.6.12和更新的.
EDIT3:这是我的代码,首先是内核模块,然后是用户空间应用程序.
要使用它,我用mem = 95m启动,然后insmod foo-module.ko,然后mknod mknod/dev/foo c 32 0,然后运行foo-user,它会死掉.在gdb下运行表明它在赋值时死了,虽然在gdb中,我无法取消引用从mmap获得的地址(虽然printf可以)
FOO-的module.c
#include <linux/module.h>
#include <linux/config.h>
#include <linux/init.h>
#include …
Run Code Online (Sandbox Code Playgroud) 如何在Linux中手动将jiffies转换为毫秒,反之亦然?我知道内核2.6有一个功能,但我正在研究2.4(作业),虽然我看了代码它使用了很多宏常量我不知道它们是否在2.4中定义.
struct file_operations scull_fops = {
.owner = THIS_MODULE,
.llseek = scull_llseek,
.read = scull_read,
.write = scull_write,
.ioctl = scull_ioctl,
.open = scull_open,
.release = scull_release,
};
Run Code Online (Sandbox Code Playgroud)
此声明使用标准C标记结构初始化语法.
有人可以详细说明吗?
我想使用Linux内核,但我不知道从哪里开始.是否有某种票务系统在哪里发布错误等?我在哪里可以获得潜在有用贡献的想法?
编辑:是的我知道我在做什么.我现在一直在编写自己的修改,而且我正在下学期在我大学的一个操作系统研究人员的指导下做一个独立的项目.
我问的原因是我想将我的专业知识贡献给开发过程,我不知道从组织的角度开始.在技术方面,我就是在那里.
我想详细了解如何工作nl80211
和cfg80211
工作.功能流程,如何nl80211
使用网络工具,如互动wpa_supplicant
,iw
.
Plz建议我参考一些有用的链接或书籍.
linux-kernel ×10
linux ×6
c ×3
memory ×2
802.11 ×1
docker ×1
embedded ×1
git ×1
kernel ×1
kill-process ×1
linux-distro ×1
mknod ×1
netlink ×1
syntax ×1
wifi ×1