我开始学习如何在linux中使用Crypto。它提供了使用散列表结构将明文传输到分组密码功能。Scatterlist句柄通过在内存页面上存储明文的位置来处理明文。结构散射列表的简化定义是:
struct scatterlist {
unsigned long page_link; //number of virtual page in kernel space where data buffer is stored
unsigned int offset; //offset from page start address to dat
我找到了以下一组命令,用于在linux上打开一个tun设备,该设备将东西转发到internet。但是,数据包不会被中继回tun设备。
ip tuntap add dev tun1 mode tun user `id -un`
ip link set dev tun1 up
ip addr add dev tun1 local 192.168.69.0 remote 192.168.69.1
iptables -t filter -I FORWARD -i tun1 -o eth0 -j ACCEPT
iptables -t filter -I FORWARD -m state --state
这里是我的问题:我想从运行在Linux内核空间中的代码中对数据文件的一部分进行内存映射。我想稍后也从Linux内核空间中运行的代码中撤销相同的内存映射。如何执行这些操作?它们与在用户空间中使用mmap(2)/munmap(2)有何不同?
我试图在没有用户进程的内核空间中做到这一点。
我浏览了网络搜索和Linux内核书籍,包括Bovet和Cesati的"Understanding the Linux Kernel“。一本好书,但没有回答我的问题。
关于mm_struct和内核线程,在Linux kernel Development ( Robert Love)一书中提到的一些要点是:
内核线程没有进程地址空间,因此没有相关的内存描述符。因此,内核线程的进程描述符的mm字段为NULL。
“由于内核线程在用户空间中没有任何页面,它们实际上不值得拥有自己的内存描述符和页表(页表将在本章后面讨论)。尽管如此,内核线程仍需要一些数据,例如页表,甚至需要访问内核内存。”
内核线程没有地址空间,并且mm为NULL。因此,当调度内核线程时,内核会注意到mm为NULL,并保持前一个进程的地址空间已加载。然后,内核会更新内核线程的进程描述符中的active
我对内核或系统编程非常陌生,
我有几个关于虚拟记忆的问题。主要涉及静态和运行时,即ELF和加载/链接等,特定于Linux86。
我的理解可能完全错误..。
我知道虚拟内存,它是分裂的1G/3G。在用户模式下进程不能访问PAGE_OFFSET以上的地址- PAGE_OFFSET是虚拟地址.
在静态时间ELF定义过程虚拟空间?
如果ELF定义虚拟地址空间,那么ELF是否也定义了内核虚拟地址空间?多么?我假设内核虚拟地址空间在运行时是动态映射的?
如果内核地址空间映射到进程地址空间,那么为什么进程大小(虚拟)也不包括内核大小?
- When and How this kernel a
我知道,如果我试图打印一个数组元素的地址,它将是一个来自虚拟内存的地址,而不是来自真实内存(物理内存),即DRAM的地址。
printf ("Address of A[5] and A[6] are %u and %u", &A[5], &A[6]);
我发现地址是连续的(假设元素是字符)。实际上,它们可能不是连续的,至少在DRAM中不是。我想知道真正的地址。我该怎么做呢?
无论是Windows还是Linux,我都需要知道这一点。
我目前正在写一个动态链接器,我有什么东西困扰着我。为什么ld.so (我的系统的动态链接器)是一个共享对象?为什么不能只是一个静态的可执行文件(ET_EXEC)呢?
我试着在linux内核的binfmt_elf.c中寻找答案,但据我理解,它清楚地表明,您的ELF解释器可以是一个静态的可执行文件。
编辑:我认为我的想法概括为:动态链接器可以是一个简单的ELF可执行文件(ET_EXEC)吗?
/* First of all, some simple consistency checks */
if (interp_elf_ex->e_type != ET_EXEC &&am
我需要在linux驱动程序中获得分配内存块的物理内存:这是一个FPGA SOC,内存被传递给SGDMA FPGA模块。
这可以归结为对“逻辑”和“虚拟”记忆的混淆:--它们是同义词还是反义?--
因此,我的驱动程序代码片段是:
unsigned long m = __get_free_pages(GFP_USER, order); // returns 'logical' address
if (m) {
instance->read_buffer[i].order = order;
if(1) { // should this be 0?
我试图理解每次编译Linux内核时创建的System.map文件,我试图理解System.map文件中的值。
下面是其中的一个示例信息
000001d5 A kexec_control_code_size
00400000 A phys_startup_32
c0400000 T _text
c0400000 T startup_32
c04000b4 T start_cpu0
c04000c4 T startup_32_smp
c04000e0 t default_entry
c0400158 t enable_paging
c04001da t is486`
如果你看到第一行,符号kexe