内核命令行传参
来源:互联网 发布:少女与战车 知乎 编辑:程序博客网 时间:2024/06/06 02:38
内核程序如何通过命令行进行传递参数
1.明确内核程序的哪个变量将来需要通过命令行传递参数;
2.利用一下宏对内核变量进行声明,告诉内核,将来可以通过命令行的形式给这个变量传递的参数
module_param (name, type, perm);
功能:对需要进行传参的内核变量进行声明
参数说明:
name: 变量名
type: 变量数据类型 bool, inbool, char, uchar, short, ushort, int, uint, long, ulong, charp:字符指针
切记:内核编程不允许处理浮点数!
解决方法:
1.浮点数的运算放在应用程序中完成!
2.3 * 3.2 -> 23 * 32
perm:对变量的访问权限,例如:0664 不允许有可执行权限!
3.一旦声明完毕,在加载内核或者内核运行期间, 可以给内核这个变量传递参数
编写内核程序,掌握内核命令行传递参数
实施步骤:
PC执行: 1.mkdir /opt/drivers/2.0 2.cd /opt/drivers/2.0 3.vim helloworld.c 4.vim Makefile 5.make 6.cp helloworld.ko /opt/rootfs/ ARM执行: //不传参 1.insmod helloworld.ko 2.rmmod helloworld //加载内核程序时,传参 3.insmod helloworld.ko irq=2000 pstr=china 4.rmmod helloworld //内核程序运行期间,传参 5.insmod helloworld.ko irq=2000 pstr=china 一旦加载完毕,内核就会在/sys/module目录下生产一个跟内核程序同名的目录 helloworld=>/sys/module/helloworld/parameters, 如果变量进行声明时,权限非0,那么在parameters目录会有一个根变量同名的文件,将来可以修改这 个文件的内容间接来修改变量的值; 如果权限为0,没有同名的文件,只能在insmod时传递参数 6.cat /sys/module/helloworld/parameters/irq 读文件 7.echo 25000 > /sys/module/helloworld/parameters/irq 向文件写入25000 8.rmmod helloworld //查看变量irq的值
helloworld.c程序如下:
#include <linux/init.h>#include <linux/module.h>//定义全局变量static int irq;static char *pstr;static int fish[10];static int nr_fish; //记录数组有效的个数//命令行传参的声明module_param(irq, int, 0664); //权限非0module_param(pstr, charp, 0); //权限为0module_param_array(fish, int, &nr_fish, 0664);//问:权限为0或者非0,有什么区别?static int helloworld_init(void){ int i; printk("%s:irq = %d, pstr = %s\n", __func__, irq, pstr); for (i = 0; i < nr_fish; i++) printk("%s:fish[%d] = %d\n", __func__, i, fish[i]); return 0;}static void helloworld_exit(void){ int i; printk("%s:irq = %d, pstr = %s\n", __func__, irq, pstr); for (i = 0; i < nr_fish; i++) printk("%s:fish[%d] = %d\n", __func__, i, fish[i]);}module_init(helloworld_init);module_exit(helloworld_exit);MODULE_LICENSE("GPL");
内核程序命令行传递参数之数组
如何给内核程序中的数组传递参数呢?
1.明确内核程序的哪个数组将来需要通过命令行传参;
2.一旦明确,对这个数组进行传参声明
module_param_array (name, type, nump, perm);
name:数组名
type: 类型
nump: 有效数组元素个数指针
perm: 访问权限,注意0和非零
对内存程序数组进行传递参数
PC机执行: 1.cd /opt/drivers/day02/2.0 2.vim helloworld.c 3.make 4.cp helloworld.ko /opt/rootfs ARM上执行: 加载时传递参数: 1.insmod helloworld.ko irq=280 pstr=china fish=1,2,3,4,5,6 2.cat /sys/module/helloworld/parameters/fish 3.echo 100,200,300,400,500,600,700,800 > /sys/module/helloworld/parameters/fish 4.rmmod helloworld // 注意:传参的个数不能超过定义数组时指定的长度 // 注意:内核要求,如果没有在内核程序运行期间传递参数的需求,内核要求变量在声明的时候 // 权限给0,目的为了节省内存资源;因为/sys/目录在系统启动的时候,已经作为sysfs虚拟文件系统的入口,这种文件系统的内容都是存在内存中;掉电就丢失;
- 内核命令行传参
- 内核命令行处理
- 使用命令行更新内核
- linux内核命令行解析
- 内核命令行处理
- php命令行传参
- python-命令行传参
- python 命令行传参
- Python命令行传参
- tensorflow命令行传参
- C语言命令行传参
- 从命令行传递参数给内核模块
- 内核命令行传递的传递过程
- linux内核命令行参数速查手册
- uboot 内核传参
- ProcessBuilder中如何为命令行传参
- ROS 节点 和 命令行传参
- shellScript之命令行向函数传参
- openCV编译的坑
- FloatingActionButton(悬浮按钮)
- iOS单个页面关闭边缘返回
- 栈和队列
- 天天学Linux命令18--whereis 命令
- 内核命令行传参
- js获取session的问题
- Android PopupWindow的使用技巧
- arcgis for js 4.x加载服务后缀为WMTS格式的服务
- 虚拟机安装ubuntu不能更改系统语言为中文解决方法
- Camel、Pastal、匈牙利标记法
- linux查看本机IP:ifconfig获取不到ip
- Wireshark 认识捕获的分析数据包(及各个分层协议的介绍)
- 在暗层的特定区域 透白色