linux configfs 研究

configfs提供了一种接口,允许通过创建文件和目录来开启和关闭内核功能。要使用它,需在内核配置中启用CONFIG_CONFIGFS。文章展示了如何初始化configfs组、注册和注销子系统,以及相关的API和数据结构。提供的实验代码包括测试目录的创建和删除操作。通过mount命令将configfs挂载到指定目录进行测试。
摘要由CSDN通过智能技术生成

作用

	configfs是一个很有用的接口,可以通过创建文件和创建夹开启和关闭相应的。同时可以通过相应的文件创建相应的属性。

开启支持

	要使用configfs需要在内核开启CONFIG_CONFIGFS特性

相关API和数据结构

config_group_init(struct config_group *);
configfs_register_subsystem(struct configfs_subsystem *subsys);
configfs_unregister_subsystem(struct configfs_subsystem *subsys);

实验代码

static struct config_group *testfs_make(struct config_group *group, const char *name)
{

}

static void testfs_drop(struct config_group *group, struct config_item *item)
{
		config_item_put(item);
}
static struct configfs_group_operations testfs_ops = {
		.make_group = &testfs_make,
		.drop_item = &testfs_drop,
};
static struct configfs_item_type testfs_type = {
		.ct_group_ops = &testfs_ops,
		.ct_owner	= THIS_MODULE,
};
static struct configfs_subsystem testfs_subsys = {
	.su_group = {
			.cg_item = {
					.ci_namedbuf = "test",
					.ci_type = &testfs,
			},
			.su_mutex = __MUTEX_INITIALIZER(testfs_subsys.su_mutex),
};

static int __init testfs_init(void)
{
		config_group_init(&testfs_subsys.su_group);
		return configfs_register_subsystem(&testfs_subsys);
}

static void __exit testfs_exit(void)
{
		configfs_unregister_subsystem(&testfs_subsys);
}
module_init(testfs_init);
module_exit(testfs_exit);
	以上代码是一个最基本的功能测试代码

测试

	mkdir config创建一个文件夹,该文件夹用于挂configfs,也可以使用内核默认的位置/sys/kernel/config
	mount -t configfs nodev config
	上述代码正常工作的情况下,config目录会有一个test文件夹

代码简要说明

	testfs_ops对应的是在test目录mkdir,rmdir操作。
	mkdir操作会调用testfs_make函数,该函数需要返回config_group类型的指针。
在嵌入式Linux下,设备树(device tree)用来描述硬件平台的各种资源,Linux内核在启动过程中,会解析设备树,获取各种硬件资源来初始化硬件。设备树的overlay功能是指可以在系统运行期间动态修改设备树。一般情况下,如上图所示,设备树经过DTC编译器编译为二进制的hello.dtb文件,加载到内存,随Linux内核一起启动后,一般就无法更改了。如果我们想修改设备树,需要修改hello.dts文件文件,重新编译成二进制文件:hello.dtb,然后重新启动内核,重新解析。有了设备树的overlay功能,省去了设备树的重新编译和内核重启,我们可以直接编写一个设备树插件:overlay.dts,编译成overlay.dtbo后,直接给设备树“打补丁”,在运行期间就可以动态添加节点、修改节点...设备树的overlay功能,在很多场合都会用得到,会让我们的开发更加方便:外界插拔设备,无法在设备树中预先描述:耳机树莓派 + FPGA开发板基于I2C的温度传感器管脚的重新配置:PIN multiplexing修改bootcmd、分区...设备树的overlay功能,目前还没有加入到内核mainline(linux-5.10.x),但目前有些开发板和配套的BSP已经支持了,支持在系统运行期间动态修改设备树文件。如果你手头的开发板或内核平台还没有支持device tree overlay,可以学习本期课程,学习内核中设备树overlay的实现原理,如何给内核打补丁,使内核支持设备树的overlay功能。有了本期课程的学习基础,明白了设备树overlay的实现原理和运行机制,你就可以尝试在自己的开发板平台上实现这个功能了。本期课程的主要内容如下:在开发板上如何实现设备树的overlay功能Configfs文件系统的配置与挂载Configfs编程接口如何编写设备树 overlay插件设备树 overlay的编译和运行设备树overlay运行机制分析本期课程适合哪些人学习:嵌入式驱动工程师嵌入式BSP工程师嵌入式软件工程师想从事嵌入式开发的同学全网首家讲解设备树overlay的视频教程。   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值