首页 > 系统相关 >Linux uevent分析、用户接收uevent以及mdev分析

Linux uevent分析、用户接收uevent以及mdev分析

时间:2023-07-19 14:34:41浏览次数:34  
标签:mdev temp uevent dev getenv char env Linux

int mdev_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int mdev_main(int argc UNUSED_PARAM, char **argv)
{
RESERVE_CONFIG_BUFFER(temp, PATH_MAX + SCRATCH_SIZE);

INIT_G();

if ENABLE_FEATURE_MDEV_CONF

G.filename = "/etc/mdev.conf";

endif

bb_sanitize_stdio();

umask(0);

xchdir("/dev");--------------------------------------------------?????????/dev??

if (argv[1] && strcmp(argv[1], "-s") == 0) {---------------------mdev -s?????/sys/dev???????
    /*
     * Scan: mdev -s
     */
    struct stat st;

if ENABLE_FEATURE_MDEV_CONF

    /* Same as xrealloc_vector(NULL, 4, 0): */
    G.rule_vec = xzalloc((1 << 4) * sizeof(*G.rule_vec));

endif

    xstat("/", &st);
    G.root_major = major(st.st_dev);
    G.root_minor = minor(st.st_dev);

    putenv((char*)"ACTION=add");

    /* Create all devices from /sys/dev hierarchy */
    recursive_action("/sys/dev",
             ACTION_RECURSE | ACTION_FOLLOWLINKS,
             fileAction, dirAction, temp, 0);----------------????????????/sys/dev??????????dev??????/etc/mdev.con??????????
} else {
    char *fw;
    char *seq;
    char *action;
    char *env_devname;
    char *env_devpath;
    unsigned my_pid;
    unsigned seqnum = seqnum; /* for compiler */
    int seq_fd;
    smalluint op;

    /* Hotplug:
     * env ACTION=... DEVPATH=... SUBSYSTEM=... [SEQNUM=...] mdev
     * ACTION can be "add", "remove", "change"
     * DEVPATH is like "/block/sda" or "/class/input/mice"
     */
    env_devname = getenv("DEVNAME"); /* can be NULL */----------????kobject_uevent_env()?????????????????do_execve()????mdev????getenv????
    G.subsystem = getenv("SUBSYSTEM");
    action = getenv("ACTION");
    env_devpath = getenv("DEVPATH");
    if (!action || !env_devpath /*|| !G.subsystem*/)
        bb_show_usage();
    fw = getenv("FIRMWARE");
    seq = getenv("SEQNUM");
    op = index_in_strings(keywords, action);--------------------keywords???add?remove???op???OP_add?OP_remove?

...
snprintf(temp, PATH_MAX, "/sys%s", env_devpath);
if (op == OP_remove) {
/* Ignoring "remove firmware". It was reported
* to happen and to cause erroneous deletion
* of device nodes. */
if (!fw)
make_device(env_devname, temp, op);-----------------?temp????????env_devnam??????
}
else {
make_device(env_devname, temp, op);---------------------??temp??????env_devname????
if (ENABLE_FEATURE_MDEV_LOAD_FIRMWARE) {
if (op == OP_add && fw)
load_firmware(fw, temp);------------------------?fw?????temp????
}
}
...
}

if (ENABLE_FEATURE_CLEAN_UP)
    RELEASE_CONFIG_BUFFER(temp);

return EXIT_SUCCESS;

}

标签:mdev,temp,uevent,dev,getenv,char,env,Linux
From: https://www.cnblogs.com/linhaostudy/p/17565475.html

相关文章

  • Linux命令-按照与使用(17)(转载)解决同一台服务器上部署多个tomcat的同一个项目session冲
    ————————————————版权声明:本文为CSDN博主「strive_or_die」的原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/strive_or_die/article/details/103191546————————————————版权声明:本文为CS......
  • Linux系统Apache添加监听端口后无法启动服务并报错:Job for httpd.service failed beca
    导言:这是SELinux安全机制导致的。解决方法:1.查看当前httpd端口#semanageport-l|grephttp2.将对应端口加入SELinux,以8068为例#semanageport-a-thttp_port_t-ptcp80683.再次查看#semanageport-l|grephttp4.重启Apache服务#systemctlrestarth......
  • docker linux开机启动
    DockerLinux开机启动在Linux系统中,可以通过配置Docker来实现在开机时自动启动Docker服务。这样可以确保Docker服务在系统启动后自动运行,方便管理和使用Docker容器。本文将介绍如何设置Docker在Linux开机时自动启动,并提供相应的代码示例。方法一:使用systemd管理器systemd是一个L......
  • Linux
    目录linux基础第1节1.1目录1.2shell是什么1.3linux命令1.4文件类型1.5ls第2节2.1alias别名机制2.2du磁盘使用情况2.3mkdir创建文件2.4touch2.5copy备份2.6find查找文件linux基础第1节1.1目录去往当前目录家目录cd~cdcd/root/cd/进......
  • linux压缩和解压
    1.压缩格式ziplinux,windows,MacOS7zipwindowsrarwindowstarlinux,MacOSgziplinux,MacOS.tar格式:简单的将文件组装到一个文件中,没有太多文件体积的减少,只是简单的封装.gz格式:使用gzip压缩算法将文件压缩到一个文件内,可以极大的减少压缩后的体积2.压缩命令针对.tar.g......
  • Linux配置IP地址
    目录修改配置文件重启网络服务相关命令查看路由状态route-n查看IP地址ipa查看网卡参数ethtoolens33查看DNS解析nslookup修改配置文件vi/etc/sysconfig/network-scripts/ifcfg-ens33配置解释TYPE=Ethernet#网卡类型是以太网PROXY_METHOD=noneBROWSER_ONLY=noBOO......
  • Linux基础命令记录
    基础命令详解1.cd:切换工作路径#cd默认回到宿主目录下#cd /opt切换到根下opt下2.ifconfig:查看更改ip地址安装包为:net-tools启动关闭指定网卡#ifconfigeth0down#ifconfigeth0up添加/删除临时子网卡#ifconfigaddens3410.254.254.74#ifcon......
  • Linux Lite 6.6发行版的候选版(RC)可供公众测试
    Linux Lite的创建者JerryBezencon近日宣布,即将推出的LinuxLite6.6发行版的候选版(RC)开发版本可供公众测试。LinuxLite6.6仍然基于Ubuntu22.04.2LTS(JammyJellyfish)长期支持的操作系统系列,由长期支持的Linux5.15LTS内核系列提供动力,并采用Xfce4.16桌面环境系列,承......
  • Linux Lite 6.6发行版的候选版(RC)可供公众测试
    Linux Lite的创建者JerryBezencon近日宣布,即将推出的LinuxLite6.6发行版的候选版(RC)开发版本可供公众测试。LinuxLite6.6仍然基于Ubuntu22.04.2LTS(JammyJellyfish)长期支持的操作系统系列,由长期支持的Linux5.15LTS内核系列提供动力,并采用Xfce4.16桌面环境系列,承......
  • Linux Lite 6.6发行版的候选版(RC)可供公众测试
    Linux Lite的创建者JerryBezencon近日宣布,即将推出的LinuxLite6.6发行版的候选版(RC)开发版本可供公众测试。LinuxLite6.6仍然基于Ubuntu22.04.2LTS(JammyJellyfish)长期支持的操作系统系列,由长期支持的Linux5.15LTS内核系列提供动力,并采用Xfce4.16桌面环境系列,承......