【《Linux内核分析》实验一】教程文章相关的互联网学习教程文章

Linux 内核SBus连接

当大部分计算机配备有 PCI 或 ISA 接口总线, 大部分老式的基于 SPARC 的工作站使用 SBus 来连接它们的外设. SBus 使一个非常先进的设计, 尽管它已出现很长时间. 它意图是处理器独立的(尽管只有 SPARC 计算机使用它)并且为 I/O 外设板做了优化. 换句话说, 你不能插入额外的 RAM 到 SBus 槽位( RAM 扩展板即便在 ISA 世界也已被忘记很长时间了, 并且 PCI 不再支持 它们). 这个优化打算来简化硬件设备和系统软件的设计, 代价是主板的...

Linux 内核 NuBus 总线

另一个有趣的, 但是几乎被忘记的, 接口总线是 NuBus. 它被发现于老的 Mac 计算机(那 些有 M68K CPU 家族的). 所有的这个总线是内存映射的(象 M68K 的所有东西), 并且设备只被地理式寻址. 这对 Apple 是好的和典型的, 因为更老的 Apple II 已经有一个类似的总线布局. 不好的是几 乎不可能找到 NuBus 的文档, 因为 Apple 对于它的 Mac 计算机一直遵循的封锁任何东 西的政策(不像之前的 Apple II, 它的源码和原理图用很少的代价即可...

Linux 内核

在接口总线领域的最新的一项是外部总线的整个类. 这包括 USB, 固件, 和 IEEE1284(基 于并口的外部总线). 这些接口有些类似于老的非外部的技术, 例如 PCMCIA/CardBus 和 甚至 SCSI. 概念上, 这些总线既不是全特性的接口总线(象 PCI 就是)也不是哑通讯通道(例如串口 是). 难于划分需要来使用这些特性的软件, 因为它通常分为 2 类: 驱动, 对于硬件控制 器(例如 PCI SCSI 适配器的驱动或者在"PCI 接口"一节中介绍的 PCI 控制器)以及对...

linux内核指针和错误值

很多内部内核函数返回一个指针值给调用者. 许多这些函数也可能失败. 大部分情况, 失 败由返回一个 NULL 指针值来指示. 这个技术是能用的, 但是它不能通知问题的确切特性. 一些接口确实需要返回一个实际的错误码以便于调用者能够基于实际上什么出错来作出正 确的判断. 许多内核接口通过在指针值中对错误值编码来返回这个信息. 这样的信息必须小心使用, 因为它们的返回值不能简单地与 NULL 比较. 为帮助创建和使用这类接口, 一小部...

Linux内核链表

操作系统内核, 如同其他程序, 常常需要维护数据结构的列表. 有时, Linux 内核已经同 时有几个列表实现. 为减少复制代码的数量, 内核开发者已经创建了一个标准环形的, 双 链表; 鼓励需要操作列表的人使用这个设施. 当使用链表接口时, 你应当一直记住列表函数不做加锁. 如果你的驱动可能试图对同一个 列表并发操作, 你有责任实现一个加锁方案. 可选项( 破坏的列表结构, 数据丢失, 内核 崩溃) 肯定是难以诊断的. 为使用列表机制, ...

Linux内核【代码】

grub2启动内核时会设置内核参数 查看系统启动时使用的内核参数 $cat /proc/cmdlineBOOT_IMAGE=/vmlinuz-3.10.0-957.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=zh_CN.UTF-8

有PCIe for FPGA的DMA Linux内核驱动程序示例吗?

我想在内核空间中编写一个驱动程序: >在嵌入式系统中通过PCIe连接FPGA(使用powerPC).>它使用DMA将信息从FPGA传输到RAM.>用户程序必须访问此信息. 我需要一些例子来做类似的事情来指导我.有谁知道我在哪里可以找到一些来源?解决方法:Connectal(http://www.connectal.org)是一个开源框架,使用户空间软件能够与Xilinx或Altera FPGA进行通信.实际上,很少有这种通信涉及设备驱动程序. Connectal支持通过内存映射硬件FIFO在软件和硬件之...

如何拥有linux内核导出/ proc / [pid] / io?【代码】

我在我的主板上运行linux并且必须在/ proc / [pid] / io中读取信息.但它没有找到. 例如:$dd if=/dev/zero of=/tmp/aa & [1] 926 $cat /proc/926/io cat: /proc/926/io: No such file or directory我需要启用内核导出吗? 非常感谢您的帮助!解决方法:根据this,您需要在内核中启用CONFIG_TASKSTATS. 您可以在various ways中检查当前内核的配置,具体取决于分发,但是查看/ boot / config – $(uname -r)可以在Redhat版本中使用. 如...

这是linux内核中有关写入/ proc / self / loginuid的错误吗?【代码】

我有可能在linux内核中发现了一个错误.让我们考虑从主线程和一个辅助线程写入/ proc / self / loginuid的应用程序.代码如下:#include <stdio.h> #include <pthread.h> #include <sys/syscall.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>void write_loginuid(char *str) {int fd;printf("%s\n", str);fd = open("/proc/self/loginuid", O_RDWR);if (fd < 0) {perror(str);return;}if (write(fd, "0", 2) ...

如何在linux内核中使用另一个c文件中的变量?【代码】

我知道正常的方式,我尝试过,但它似乎不起作用. 在linux / net / sched / sch_htb.c中,我定义了变量:unsigned int queuelength; EXPORT_SYMBOL(queuelength);关于变量的一些动作,并不重要. 在linux / net / ipv4 / tcp_dctcp.c中,extern unsigned int queuelength;net / built-in.o出错:In function `dctcp_update_alpha': linux/net/ipv4/tcp_dctcp.c:230: undefined reference to `queuelength'内核版本是v4.6.解决方法:它取决于...

Linux内核如何交换文件映射页面?

我使用文件映射来读取20 GB的文件.当主内存耗尽时,内核如何将文件映射页面交换到磁盘? 我猜想一种可能的方法是将页面条目设置为NULL.然后,如果访问该页面,则再次调用do_no_page()函数以将文件映射到内存.这样对吗? 另一个问题是内核用于交换内存页面的优先级是什么?普通页面或文件映射页面?解决方法:页表中的每个条目都有一个无效位.将页面交换到硬盘驱动器时,会设置其无效位.每当访问页面时,MMU(处理器内部的内存管理单元)引发...

出于好奇:为什么linux内核“优化”strcpy比libc imp慢得多?【代码】

我尝试在http://lxr.linux.no/#linux+v2.6.38/arch/x86/lib/string_32.c下对优化的字符串操作进行基准测试,并与常规strcpy进行比较:#include<stdio.h> #include<stdlib.h> char *_strcpy(char *dest, const char *src) {int d0, d1, d2;asm volatile("1:\tlodsb\n\t""stosb\n\t""testb %%al,%%al\n\t""jne 1b": "=&S" (d0), "=&D" (d1), "=&a" (d2): "0" (src), "1" (dest) : "memory");return dest; } int main(int argc, char *...

如何在Linux内核中计算BogoMips?【代码】

如何在linux内核中计算出bogomips?究竟做了什么来获得这个价值?解决方法: /** Standalone BogoMips program** Based on code Linux kernel code in init/main.c and* include/linux/delay.h** For more information on interpreting the results, see the BogoMIPS* Mini-HOWTO document.** version: 1.3 * author: Jeff Tranter (Jeff_Tranter@Mitel.COM)*/#include <stdio.h> #include <time.h>#ifdef CLASSIC...

如何在Linux内核中启用动态调试?【代码】

我在内核配置文件中启用了CONFIG_DYNAMIC_DEBUG标志.当我在我的系统中启动时,我能够挂载/ sys / kernel / debug,并且还有dynamic_debug / control文件. 但是当我发出任何命令时echo -n 'module nfsd +p' > <debugfs>/dynamic_debug/control它没有在dmesg或syslogd中显示任何输出.我究竟做错了什么?解决方法:你设置了日志级别吗?echo 8 > /proc/sys/kernel/printk

linux – 内核如何通知用户空间程序发生中断【代码】

我正在编写用户空间程序和内核空间设备驱动程序. 目标:一旦发生中断,用户空间程序需要快速执行某些操作. 我的天真方法:用户空间程序使用ioctl调用wait_event_interruptible(),内核ISR调用wake_up_interruptible()来唤醒用户空间程序.事实证明,从中断到用户空间需要花费太多时间. 有没有更好的方法? 谢谢!解决方法:这里有一个类似的问题: Notify gpio interrupt to user space from a kernel module 请检查以上问题.但是,我可以...