linux I/O 端口分配

如同你可能希望的, 你不应当离开并开始抨击 I/O 端口而没有首先确认你对这些端口有 唯一的权限. 内核提供了一个注册接口以允许你的驱动来声明它需要的端口. 这个接口中 的核心的函数是 request_region:

#include <linux/ioport.h>

struct resource *request_region(unsigned long first, unsigned long n, const char *name);

这个函数告诉内核, 你要使用 n 个端口, 从 first 开始. name 参数应当是你的设备的 名子. 如果分配成功返回值是非 NULL. 如果你从 request_region 得到 NULL, 你将无法 使用需要的端口.

所有的的端口分配显示在 /proc/ioports 中. 如果你不能分配一个需要的端口组, 这是 地方来看看谁先到那里了.

当你用完一组 I/O 端口(在模块卸载时, 也许), 应当返回它们给系统, 使用: void release_region(unsigned long start, unsigned long n); 还有一个函数以允许你的驱动来检查是否一个给定的 I/O 端口组可用:

int check_region(unsigned long first, unsigned long n);

这里, 如果给定的端口不可用, 返回值是一个负错误码. 这个函数是不推荐的, 因为它的 返回值不保证是否一个分配会成功; 检查和后来的分配不是一个原子的操作. 我们列在这 里因为几个驱动仍然在使用它, 但是你调用一直使用 request_region, 它进行要求的加 锁来保证分配以一个安全的原子的方式完成.

原文地址:https://www.cnblogs.com/fanweisheng/p/11142214.html

时间: 2024-10-18 17:30:49

linux I/O 端口分配的相关文章

linux防火墙开放端口时报ptables-restore: line 13 failed [失败]

linux开放8080端口 在/etc/sysconfig/iptables中添加一行[-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT] 然后service iptables restart,报下面问题 解决方法: 问题原因:对linux防火墙相关配置不熟悉: 参考链接:http://www.mamicode.com/info-detail-1179017.html

linux TCP UDP 端口映射 及DNS劫持

对于linux下的端口映射问题多出现在使用linux做为网关路由,用来连接ISP使用时并把公司的内网IP地址NAT成ISP提供的IP.保证内网所有主机可以共享一个公网IP来访问internet.但这样做的同时也会带来一个问题就是我们无法在办公室以后的网络中访问或管理我们内网的服务器.要解决这个问题就要在linux网关服务器上将ISP提供的IP的相关端口通过DNAT方式映射到我们内网服务器的开放端口上,即可实现在外网管理内网服务器. 情景1.公网为223.71.x.x,内网IP为172.17.17

20150222 IMX257 Linux内存空间内存分配

2015-02-22     李海沿 不知道为什么,最近做梦总是梦见以前的事,以前的场景,可能是28号回学校的缘故吧!好了,不扯废话了,前面我针对gpio按键这个实验学习了中断,信号量,定时器等内核实现,下面我们,使用以前的字符设备模板来写一个Linux内存空间内存分配的实验. 一.KMALLOC kmalloc 是一个功能强大且高速(除非被阻塞)的工具,所分配到的内存在物理内存中连续且保持原有的数据(不清零).原型: #include <linux/slab.h> void *kmalloc

linux下ssh端口的修改和登录

linux下ssh端口的修改和登录 首先修改配置文件 vi /etc/ssh/sshd_config 找到#Port 22一段,这里是标识默认使用22端口,添加如下一行: Port 50000 然后保存退出 1.端口修改 执行/etc/init.d/sshd restart 这样SSH端口将同时工作在50000上. 2.防火墙修改 现在编辑防火墙配置:vi /etc/sysconfig/iptables 启用50000端口.添加如下一行 1 -A INPUT -m state --state N

Linux下查看端口被哪个程序占用

Linux如何查看端口被哪个进程占用的方法,使用工具lsof,netstat: 1.lsof -i: 端口号 lsof命令用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP.UDP).找回/恢复删除的文件.是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所以需要root用户执行. 如果系统没有lsof工具,可以通过yum安装之. yum install lsof 选项: -a:列出打开文件存在的进程:  -c<进程名>:列出指定进程所打开的文件:  -g:列

Linux 下IO端口编程访问

以前写的一篇笔记,偶尔翻出来了,放在这里做个纪念 Linux 下IO端口编程访问 这里记录的方法是在用户态访问IO端口,不涉及驱动程序的编写. 首先要包含头文件 /usr/include/asm/io.h ioperm() 在 unistd.h 中声明.用来打开对IO端口的访问权限,要求程序执行时必须有root 权限.只可以打开0x00到0x3ff 这一地址段的IO端口. ioperm( from, num, turn_on) 比如: #include<asm/io.h> #include&l

Linux开放1521端口允许网络连接Oracle Listener

症状: 1. TCP/IP连接是通的.可以用ping 命令测试. 2. 服务器上Oracle Listener已经启动.   lsnrctl status  查看listener状态   lsnrctl start    启动Oracle listener 3. 客户端得到的错误信息通常是:ORA-12170: TNS:连接超时 这时,我们基本可以肯定是服务器没有开放1521端口(假设你用默认设置) 解决方法:   1. 假如你是在一个局域网环境,配置了防火墙.那么可以关闭Linux的防火墙.

Linux Tomcat安装,Linux配置Tomcat,Linux Tomcat修改内存,Linux tomcat修改端口

Linux Tomcat安装,Linux配置Tomcat,Linux Tomcat修改内存,Linux tomcat修改端口 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ?Copyright 蕃薯耀 2017年3月1日 http://www.cnblogs.com/fanshuyao/ JDK安

Linux和Windows端口常用操作

Linux和Windows端口常用操作 一:简介 开发过程中常常会遇到端口被占用的问题.偶尔也会遇到明明服务器上tomcat正常运行.启动正常.运行正常.但是在外部就是访问不了!有时候我们清楚的知道是什么程序占用了端口.但是有的时候就不得不通过命令的方式来查看指定的端口到底被哪个程序占用了.还有较少的一种情况是这个端口到底有没有对外开放.尤其是在Linux当中. 二:Windows指定端口操作 1: 主要命令 主要命令(只做功能介绍.详细使用请 xxx /? 查看): a)     netsta