11-Openwrt hotplug system

部署运行你感兴趣的模型镜像

hotplug为linux的一个热拔插系统,在很多应用都有用到,如网口的拔插,USB的拔插,按键的触发…非常广泛的应用,下面举几个例子来进行理解这个过程

1.gpio-button-hotplug(内核层发送hotplug到procd)

gpio-button-hotplug为kernel的一个package,位于package/kernel/gpio-button-hotplug/

要把CONFIG_PACKAGE_kmod-gpio-button-hotplug=y选项打开

1.1驱动

"gpio-keys"和"gpio-keys-polled"就是两个platform设备,如下:

static struct platform_driver gpio_keys_driver = {
    .probe  = gpio_keys_probe,
    .remove = gpio_keys_remove,
    .driver = {
        .name   = "gpio-keys",
        .owner  = THIS_MODULE,
        .of_match_table = of_match_ptr(gpio_keys_of_match),
    },
};

static struct platform_driver gpio_keys_polled_driver = {
    .probe  = gpio_keys_polled_probe,
    .remove = gpio_keys_remove,
    .driver = {
        .name   = "gpio-keys-polled",
        .owner  = THIS_MODULE,
        .of_match_table = of_match_ptr(gpio_keys_polled_of_match),
    },
};

static int __init gpio_button_init(void)
{
    int ret;

    ret = platform_driver_register(&gpio_keys_driver);
    if (ret)
        return ret;

    ret = platform_driver_register(&gpio_keys_polled_driver);
    if (ret)
        platform_driver_unregister(&gpio_keys_driver);

    return ret;
}

static void __exit gpio_button_exit(void)
{
    platform_driver_unregister(&gpio_keys_driver);
    platform_driver_unregister(&gpio_keys_polled_driver);
}

module_init(gpio_button_init);
module_exit(gpio_button_exit);

与以前的做法一样,device和driver,driver这边有了,device要么arch里面要么dts里面。

看下DTS里面的配置

gpio-keys-polled {
    compatible = "gpio-keys-polled";
    #address-cells = <1>;
    #size-cells = <0>;
    poll-interval = <20>;

    power {
        label = "power";
        gpios = <&gpio0 24 1>;  //GPIO24 line is low, key is pressed
        linux,code = <116>;     //KEY_POWER
    };
    reset {
        label = "reset";
        gpios = <&gpio1 11 1>;  //GPIO43 line is low, key is pressed
        linux,code = <0x198>;   //KEY_RESTART
    };
};

上面的这些参数,在gpio_keys_get_devtree_pdata函数里面都会进行解析判断格式是否正确,错误在启动注册时就会直接提示错误信息。

另一种就是在arch里面注册,
在zkernel/3.10.49/arch/mips/mtk/dev-gpio-buttons.c里面提供了注册接口,调用即可。

#define ZRMT7621_KEYS_POLL_INTERVAL         20
#define ZRMT7621_KEYS_DEBOUNCE_INTERVAL     (3 * ZRMT7621_KEYS_POLL_INTERVAL)

static struct gpio_keys_button zrmt7621_gpio_buttons[] __initdata = {
    {
        .desc       = "reset",
        .type       = EV_KEY,
        .code       = KEY_RESTART,
        .debounce_interval = ZRMT7621_KEYS_DEBOUNCE_INTERVAL,
        .gpio       = ZRMT7621_GPIO_BUTTON_RESET,
        .active_low = 1,
    },
};


ramips_register_gpio_buttons(-1, ZRMT7621_KEYS_POLL_INTERVAL,
         ARRAY_SIZE(zrmt7621_gpio_buttons),
                    zrmt7621_gpio_buttons);

在上面的button结构体里面要定义好对应的type和code,

这边故意将linux,code里面的数值写成数值,是为了让我们看到更底层的定义,在gpio-button-hotplug.c里面有如下定义,

static struct bh_map button_map[] = {
    BH_MAP(BTN_0,           "BTN_0"),
    BH_MAP(BTN_1,           "BTN_1"),
    BH_MAP(BTN_2,           "BTN_2"),
    BH_MAP(BTN_3,           "BTN_3"),
    BH_MAP(BTN_4,           "BTN_4"),
    BH_MAP(BTN_5,           "BTN_5"),
    BH_MAP(BTN_6,           "BTN_6"),
    BH_MAP(BTN_7,           "BTN_7"),
    BH_MAP(BTN_8,           "BTN_8"),
    BH_MAP(BTN_9,           "BTN_9"),
    BH_MAP(KEY_BRIGHTNESS_ZERO, "brightness_zero"),
    BH_MAP(KEY_CONFIG,      "config"),
    BH_MAP(KEY_COPY,        "copy"),
    BH_MAP(KEY_EJECTCD,     "eject"),
    BH_MAP(KEY_HELP,        "help"),
    BH_MAP(KEY_LIGHTS_TOGGLE,   "lights_toggle"),
    BH_MAP(KEY_PHONE,       "phone"),
    BH_MAP(KEY_POWER,       "power"),
    BH_MAP(KEY_RESTART,     "reset"),
    BH_MAP(KEY_RFKILL,      "rfkill"),
    BH_MAP(KEY_VIDEO,       "video"),
    BH_MAP(KEY_WIMAX,       "wwan"),
    BH_MAP(KEY_WLAN,        "wlan"),
    BH_MAP(KEY_WPS_BUTTON,      "wps"),
};

include/dt-bindings/input/linux-event-codes.h里面有如下定义,所以就知道最终的数值了。

#define KEY_RESTART     0x198

#define KEY_INSERT      110
#define KEY_DELETE      111
#define KEY_MACRO       112
#define KEY_MUTE        113
#define KEY_VOLUMEDOWN  114
#define KEY_VOLUMEUP    115
#define KEY_POWER       116 /* SC System Power Down */
#define KEY_KPEQUAL     117
#define KEY_KPPLUSMINUS 118
#define KEY_PAUSE       119
#define KEY_SCALE       120 /* AL Compiz Scale (Expose) */

驱动加载成功则会有如下信息:

root@zihome:/sys/devices/platform/gpio-keys-polled# ls
driver     modalias   subsystem  uevent

1.2 key的应用层处理
当按键时,则触发button_hotplug_event函数(gpio-button-hotplug.c):调用button_hotplug_create_event产生uevent事件,调用button_hotplug_fill_even填充事件(JSON格式),并最终调用broadcast_uevent发出uevent广播信息,后由内核netlink_broadcast函数(linux-3.10.49/net/netlink/af_netlink.c)

netlink的实现原理可以看下面这篇文件的介绍,为socket通信,内核发出socket广播,上层应用(procd)只需要监听这个socket事件即可。
Linux中Netlink实现热插拔监控——内核与用户空间通信_jzmmc-优快云博客

上述广播,被procd进程中的hotplug_handler (procd/plug/hotplug.c) 收到,并根据etc/hotplug.json中预先定义的JSON内容匹配条件,定位到对应的执行函数,具体为:

[ "if",
        [ "and",
                [ "has", "BUTTON" ],
                [ "eq", "SUBSYSTEM", "button" ],
        ],
        [ "exec", "/etc/rc.button/%BUTTON%" ]
],

最终会执行/etc/rc.button/里面的对应的脚本,如reset/power,脚本的名字要跟button_map结构里面的一致。

root@LEDE:/# cat etc/rc.button/power 
#!/bin/sh

[ "${ACTION}" = "released" ] || exit 0

exec /sbin/poweroff

return 0
root@LEDE:/# cat etc/rc.button/reset 
#!/bin/sh

. /lib/functions.sh

OVERLAY="$( grep ' /overlay ' /proc/mounts )"

case "$ACTION" in
pressed)
        [ -z "$OVERLAY" ] && return 0

        return 5
;;
timeout)
        . /etc/diag.sh
        set_state failsafe
;;
released)
        if [ "$SEEN" -lt 1 ]
        then
                echo "REBOOT" > /dev/console
                sync
                reboot
        elif [ "$SEEN" -gt 5 -a -n "$OVERLAY" ]
        then
                echo "FACTORY RESET" > /dev/console
                jffs2reset -y && reboot &
        fi
;;
esac

return 0
2.WAN口网线是否插入检测(phy内核发出)

内核检测到WAN口变化后会创建hotplug消息(broadcast_uevent),发送给procd,再转发到对应的模块

static void phy_hotplug_work(struct work_struct *work)
{
    struct bh_event *event = container_of(work, struct bh_event, work);
    int ret = 0;

    event->skb = alloc_skb(BH_SKB_SIZE, GFP_KERNEL);
    if (!event->skb)
        goto out_free_event;

    ret = bh_event_add_var(event, 0, "%s@", event->action);
    if (ret)
        goto out_free_skb;

    ret = phy_hotplug_fill_event(event);
    if (ret)
        goto out_free_skb;

    if (event->type) {
        printk(KERN_NOTICE "phy: port%u %s(irq)\n", event->port_num, event->action);
    } else {
        printk(KERN_NOTICE "phy: port%u %s(dev)\n", event->port_num, event->action);
    }

    NETLINK_CB(event->skb).dst_group = 1;
    broadcast_uevent(event->skb, 0, 1, GFP_KERNEL);

 out_free_skb:
    if (ret) {
        kfree_skb(event->skb);
    }
 out_free_event:
    kfree(event);
}

发出后就会触发以下脚本,在脚本里面添加我们需要的内容

vim /etc/hotplug.d/phy/00-wan

case "$wan_ifname" in                                                
"eth"*)                                                              
        if [ "$wan_port" = "$PORTNUM" ]; then                        
                logger -t "phy" "$PORTNUM $ACTION"                   
                mkdir -p /tmp/status >/dev/null 2>&1                 
                case "$ACTION" in                                    
                "linkup")                                            
                        echo "1" >/tmp/status/wan_port_status        
                        ubus call zboard set_wan "{\"status\":1,\"port\":$wan_port}"
                        dhcp_handle_up "wan" "$wan_ifname"                          
                        ;;                                                          
                "linkdown")                                                         
                        echo "0" >/tmp/status/wan_port_status                       
                        ubus call zboard set_wan "{\"status\":0,\"port\":$wan_port}"
                        dhcp_handle_down "wan" "$wan_ifname"                        
                        ;;                                                          
                esac                                                                
                                                                                    
                phy_hotplug "wan" $ACTION                                           
        fi                                                                          
        ;;                                                                          
*)                                                                                  
        if [ "$wan_port" = "$PORTNUM" ]; then                                       
                logger -t "phy" "$PORTNUM $ACTION for wisp"                         
                mkdir -p /tmp/status >/dev/null 2>&1                                
                case "$ACTION" in                                                   
                "linkup")                                                           
                        echo "1" >/tmp/status/wan_port_status                       
                        ubus call zboard set_wan "{\"status\":1,\"port\":$wan_port}"
                        ;;                                                          
                "linkdown")                                                         
                        echo "0" >/tmp/status/wan_port_status                       
                        ubus call zboard set_wan "{\"status\":0,\"port\":$wan_port}"
                        ;;                                                          
                esac                                                                
        fi                                                                          
        ;;                                                                          
esac                
3.网络检测添加LED闪烁(/sbin/hotplug-call)
3.1 zdetect网络检测模块

在zrouter/zpackages/zihome/utils/zdetect/src/zdetect.c里面会发送hotplug event当网络变化的时候:

static void inet_hotplug(const char* action)
{
    char *argv[3];
    int pid;

    pid = fork();
    if (pid < 0) {
        dbg_printf(MSG_INFO, "hotplug_event fork failed!");
        return;
    } else if (pid == 0) {
        setenv("ACTION", action, 1); 

        argv[0] = HOTPLUG_PATH;
        argv[1] = "inet";
        argv[2] = NULL;
        execvp(argv[0], argv);
        exit(127);
    }   
}
3.2 收到inet模块hotplug消息后

14.07/package/base-files/files/etc/hotplug.d/inet/00-inet

#!/bin/sh

case "$ACTION" in
        "online")
        logger -t "inet" "detect online"
        zihome_led yellow on
        ;;
        "offline")
        logger -t "inet" "detect offline"
        zihome_led yellow 1000 1000
        ;;
        *) ;;
esac
3.3 调用led执行脚本

14.07/package/base-files/files/sbin/zihome_led

#!/bin/sh

. /lib/functions/leds.sh

led_path="zihome:""$1"

led

4.iface(netifd)
每次网络接口启动(up)或者关闭(down)的时候,所有在/etc/hotplug.d/iface/目录中的脚本都会以字母顺序执行。根据一个不成文的规则,会在每个脚本的前面加上一个数字前缀来设置正确的运行顺序。这就是为什么脚本名称都像:/etc/hotplug.d/iface/-的原因。

变量名称描述
ACTION“ifup” 或者 “ifdown”
INTERFACE网络接口的名称,如"wan"
DEVICE物理设备的名称,如"br-lan"

hotplug脚本调用_hotplug-call-优快云博客 

static void call_hotplug(void)
{
    const char *device = NULL;
    if (list_empty(&pending))
        return;

    current = list_first_entry(&pending, struct interface, hotplug_list);
    current_ev = current->hotplug_ev;
    list_del_init(&current->hotplug_list);

    if ((current_ev == IFEV_UP || current_ev == IFEV_UPDATE) && current->l3_dev.dev)
        device = current->l3_dev.dev->ifname;

    D(SYSTEM, "Call hotplug handler for interface '%s', event '%s' (%s)\n",
    current->name, eventnames[current_ev], device ? device : "none");
    run_cmd(current->name, device, current_ev, current->updated);
}
static void run_cmd(const char *ifname, const char *device, enum interface_event event,
        enum interface_update_flags updated)
{
    char *argv[3];
    int pid;

    pid = fork();
    if (pid < 0)
        return task_complete(NULL, -1);

    if (pid > 0) {
        task.pid = pid;
        uloop_process_add(&task);
        return;
    }

    setenv("ACTION", eventnames[event], 1);
    setenv("INTERFACE", ifname, 1);
    if (device)
        setenv("DEVICE", device, 1);

    if (event == IFEV_UPDATE) {
        if (updated & IUF_ADDRESS)
            setenv("IFUPDATE_ADDRESSES", "1", 1);
        if (updated & IUF_ROUTE)
            setenv("IFUPDATE_ROUTES", "1", 1);
        if (updated & IUF_PREFIX)
            setenv("IFUPDATE_PREFIXES", "1", 1);
        if (updated & IUF_DATA)
            setenv("IFUPDATE_DATA", "1", 1);
    }

    argv[0] = hotplug_cmd_path;
    argv[1] = "iface";
    argv[2] = NULL;
    execvp(argv[0], argv);
    exit(127);
}

 

 

您可能感兴趣的与本文相关的镜像

Wan2.2-T2V-A5B

Wan2.2-T2V-A5B

文生视频
Wan2.2

Wan2.2是由通义万相开源高效文本到视频生成模型,是有​50亿参数的轻量级视频生成模型,专为快速内容创作优化。支持480P视频生成,具备优秀的时序连贯性和运动推理能力

wyl@ubuntu:~/NVMP/nvmp$ make V=s ERROR: please fix package/tp_package/lte/Makefile - see logs/package/tp_package/lte/dump.txt for details Collecting package info: done /bin/sh: 8: @echo: not found cat: /home/wyl/NVMP/nvmp/product_config/c510wv1/buildams.config: No such file or directory make[1]: Entering directory '/home/wyl/NVMP/nvmp' make[2]: Entering directory '/home/wyl/NVMP/nvmp' make[3]: Entering directory '/home/wyl/NVMP/nvmp/target/linux' make[4]: Entering directory '/home/wyl/NVMP/nvmp/target/linux/ingenic' if [ -e /home/wyl/NVMP/nvmp/product_config/c510wv1/board/board.h ]; then cp /home/wyl/NVMP/nvmp/product_config/c510wv1/board/board.h "/home/wyl/NVMP/nvmp/../sdk/soc/t31x/linux-3.10.14"/arch/mips/xburst/soc-t23/chip-t23/isvp/Pike/board.h -f; fi cd /home/wyl/NVMP/nvmp/include/nfs_kernel_script && ./modify_kernel_config_ingenic.sh /home/wyl/NVMP/nvmp/product_config/c510wv1 /home/wyl/NVMP/nvmp/scripts/kconfig.pl + + /home/wyl/NVMP/nvmp/target/linux/generic/config-3.10 /home/wyl/NVMP/nvmp/product_config/c510wv1/kernel.config /home/wyl/NVMP/nvmp/target/linux/ingenic/t31x/config-3.10 > /home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/linux-ingenic_t31x/linux-3.10.14/.config.target awk '/^(#[[:space:]]+)?CONFIG_KERNEL/{sub("CONFIG_KERNEL_","CONFIG_");print}' /home/wyl/NVMP/nvmp/.config >> /home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/linux-ingenic_t31x/linux-3.10.14/.config.target echo "# CONFIG_KALLSYMS_EXTRA_PASS is not set" >> /home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/linux-ingenic_t31x/linux-3.10.14/.config.target echo "# CONFIG_KALLSYMS_ALL is not set" >> /home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/linux-ingenic_t31x/linux-3.10.14/.config.target echo "# CONFIG_KPROBES is not set" >> /home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/linux-ingenic_t31x/linux-3.10.14/.config.target /home/wyl/NVMP/nvmp/scripts/metadata.pl kconfig /home/wyl/NVMP/nvmp/tmp/.packageinfo /home/wyl/NVMP/nvmp/.config > /home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/linux-ingenic_t31x/linux-3.10.14/.config.override /home/wyl/NVMP/nvmp/scripts/kconfig.pl 'm+' '+' /home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/linux-ingenic_t31x/linux-3.10.14/.config.target /dev/null /home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/linux-ingenic_t31x/linux-3.10.14/.config.override > /home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/linux-ingenic_t31x/linux-3.10.14/.config mv /home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/linux-ingenic_t31x/linux-3.10.14/.config /home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/linux-ingenic_t31x/linux-3.10.14/.config.old grep -v INITRAMFS /home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/linux-ingenic_t31x/linux-3.10.14/.config.old > /home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/linux-ingenic_t31x/linux-3.10.14/.config echo 'CONFIG_INITRAMFS_SOURCE=""' >> /home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/linux-ingenic_t31x/linux-3.10.14/.config rm -rf /home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/linux-ingenic_t31x/modules [ -d /home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/linux-ingenic_t31x/linux-3.10.14/user_headers ] || make -C "/home/wyl/NVMP/nvmp/../sdk/soc/t31x/linux-3.10.14" O=/home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/linux-ingenic_t31x/linux-3.10.14 CROSS_COMPILE="mips-linux-uclibc-gnu-" HOSTCFLAGS="-O2 -I/home/wyl/NVMP/nvmp/staging_dir/host/include -Wall -Wmissing-prototypes -Wstrict-prototypes" ARCH="mips" KBUILD_HAVE_NLS=no CONFIG_SHELL="/bin/bash" V='' CC="mips-linux-uclibc-gnu-gcc" INSTALL_HDR_PATH=/home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/linux-ingenic_t31x/linux-3.10.14/user_headers headers_install echo "a74cf375559f80d758a3e54a15723d6b" > /home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/linux-ingenic_t31x/linux-3.10.14/.vermagic cp "/home/wyl/NVMP/nvmp/../sdk/soc/t31x/linux-3.10.14"/scripts/ /home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/linux-ingenic_t31x/linux-3.10.14/ -rf mkdir -p /home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/linux-ingenic_t31x/linux-3.10.14/arch/mips/xburst/core cp "/home/wyl/NVMP/nvmp/../sdk/soc/t31x/linux-3.10.14"/arch/mips/xburst/core/mxu-v2-ex.obj /home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/linux-ingenic_t31x/linux-3.10.14/arch/mips/xburst/core/mxu-v2-ex.obj -rf touch /home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/linux-ingenic_t31x/linux-3.10.14/.configured rm -f /home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/linux-ingenic_t31x/linux-3.10.14/vmlinux /home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/linux-ingenic_t31x/linux-3.10.14/System.map make -C "/home/wyl/NVMP/nvmp/../sdk/soc/t31x/linux-3.10.14" O=/home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/linux-ingenic_t31x/linux-3.10.14 CROSS_COMPILE="mips-linux-uclibc-gnu-" HOSTCFLAGS="-O2 -I/home/wyl/NVMP/nvmp/staging_dir/host/include -Wall -Wmissing-prototypes -Wstrict-prototypes" ARCH="mips" KBUILD_HAVE_NLS=no CONFIG_SHELL="/bin/bash" V='' CC="mips-linux-uclibc-gnu-gcc" -j1 modules make[5]: Entering directory '/home/wyl/NVMP/sdk/soc/t31x/linux-3.10.14' make -C /home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/linux-ingenic_t31x/linux-3.10.14 \ KBUILD_SRC=/home/wyl/NVMP/sdk/soc/t31x/linux-3.10.14 \ KBUILD_EXTMOD="" -f /home/wyl/NVMP/sdk/soc/t31x/linux-3.10.14/Makefile \ modules HOSTCC scripts/basic/fixdep GEN /home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/linux-ingenic_t31x/linux-3.10.14/Makefile HOSTCC scripts/kconfig/conf.o SHIPPED scripts/kconfig/zconf.tab.c SHIPPED scripts/kconfig/zconf.lex.c SHIPPED scripts/kconfig/zconf.hash.c HOSTCC scripts/kconfig/zconf.tab.o In file included from scripts/kconfig/zconf.tab.c:2503:0: scripts/kconfig/menu.c: In function 'get_symbol_str': scripts/kconfig/menu.c:567:18: warning: 'jump' may be used uninitialized in this function [-Wmaybe-uninitialized] jump->offset = r->len - 1; ^ scripts/kconfig/menu.c:528:19: note: 'jump' was declared here struct jump_key *jump; ^ HOSTLD scripts/kconfig/conf scripts/kconfig/conf --silentoldconfig Kconfig .config:828:warning: override: DEFAULT_DEADLINE changes choice state .config:1758:warning: override: KERNEL_XZ changes choice state .config:3892:warning: override: TREE_PREEMPT_RCU changes choice state # # configuration written to .config # Using /home/wyl/NVMP/sdk/soc/t31x/linux-3.10.14 as source for kernel GEN /home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/linux-ingenic_t31x/linux-3.10.14/Makefile CHK include/generated/uapi/linux/version.h CHK include/generated/utsrelease.h CALL scripts/checksyscalls.sh grep: scripts/../arch/x86/syscalls/syscall_32.tbl: No such file or directory CC scripts/mod/empty.o HOSTCC scripts/mod/mk_elfconfig MKELF scripts/mod/elfconfig.h CC scripts/mod/devicetable-offsets.s GEN scripts/mod/devicetable-offsets.h HOSTCC scripts/mod/file2alias.o HOSTCC scripts/mod/modpost.o HOSTCC scripts/mod/sumversion.o HOSTLD scripts/mod/modpost HOSTCC scripts/sortextable In file included from scripts/sortextable.c:162:0: scripts/sortextable.c: In function 'main': scripts/sortextable.h:158:3: warning: 'relocs_size' may be used uninitialized in this function [-Wmaybe-uninitialized] memset(relocs, 0, relocs_size); ^ scripts/sortextable.h:104:6: note: 'relocs_size' was declared here int relocs_size; ^ In file included from scripts/sortextable.c:160:0: scripts/sortextable.h:158:3: warning: 'relocs_size' may be used uninitialized in this function [-Wmaybe-uninitialized] memset(relocs, 0, relocs_size); ^ scripts/sortextable.h:104:6: note: 'relocs_size' was declared here int relocs_size; ^ Building modules, stage 2. MODPOST 3 modules make[5]: Leaving directory '/home/wyl/NVMP/sdk/soc/t31x/linux-3.10.14' touch /home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/linux-ingenic_t31x/linux-3.10.14/.modules make -C image compile TARGET_BUILD= make[5]: Entering directory '/home/wyl/NVMP/nvmp/target/linux/ingenic/image' make[5]: 'compile' is up to date. make[5]: Leaving directory '/home/wyl/NVMP/nvmp/target/linux/ingenic/image' make[4]: Leaving directory '/home/wyl/NVMP/nvmp/target/linux/ingenic' make[3]: Leaving directory '/home/wyl/NVMP/nvmp/target/linux' make[2]: Leaving directory '/home/wyl/NVMP/nvmp' make[2]: Entering directory '/home/wyl/NVMP/nvmp' find /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic -type d | xargs -r chmod 0755 rm -rf /home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic make[2]: Leaving directory '/home/wyl/NVMP/nvmp' make[2]: Entering directory '/home/wyl/NVMP/nvmp' make[3]: Entering directory '/home/wyl/NVMP/nvmp/package/toolchain' rm -rf /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/tmp-libc mkdir -p /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/stamp /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/tmp-libc for file in ./lib/ld-uClibc* ./lib/lib{c,uClibc}{-*.so,.so.*} ./lib/lib{crypt,dl,m,rt}{-*.so,.so.*}; do dir=`dirname $file` ; install -d -m0755 /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/tmp-libc/$dir ; cp -fpR /home/wyl/NVMP/nvmp/../sdk/soc/t31x/uclibc-toolchain-0.9.33/mips-gcc472-glibc216-64bit/mips-linux-gnu/libc/uclibc/$file /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/tmp-libc/$dir/ ; done ; exit 0 cp: cannot stat '/home/wyl/NVMP/nvmp/../sdk/soc/t31x/uclibc-toolchain-0.9.33/mips-gcc472-glibc216-64bit/mips-linux-gnu/libc/uclibc/./lib/ld-uClibc*': No such file or directory cp: cannot stat '/home/wyl/NVMP/nvmp/../sdk/soc/t31x/uclibc-toolchain-0.9.33/mips-gcc472-glibc216-64bit/mips-linux-gnu/libc/uclibc/./lib/libc-*.so': No such file or directory cp: cannot stat '/home/wyl/NVMP/nvmp/../sdk/soc/t31x/uclibc-toolchain-0.9.33/mips-gcc472-glibc216-64bit/mips-linux-gnu/libc/uclibc/./lib/libc.so.*': No such file or directory cp: cannot stat '/home/wyl/NVMP/nvmp/../sdk/soc/t31x/uclibc-toolchain-0.9.33/mips-gcc472-glibc216-64bit/mips-linux-gnu/libc/uclibc/./lib/libuClibc-*.so': No such file or directory cp: cannot stat '/home/wyl/NVMP/nvmp/../sdk/soc/t31x/uclibc-toolchain-0.9.33/mips-gcc472-glibc216-64bit/mips-linux-gnu/libc/uclibc/./lib/libuClibc.so.*': No such file or directory cp: cannot stat '/home/wyl/NVMP/nvmp/../sdk/soc/t31x/uclibc-toolchain-0.9.33/mips-gcc472-glibc216-64bit/mips-linux-gnu/libc/uclibc/./lib/libcrypt-*.so': No such file or directory cp: cannot stat '/home/wyl/NVMP/nvmp/../sdk/soc/t31x/uclibc-toolchain-0.9.33/mips-gcc472-glibc216-64bit/mips-linux-gnu/libc/uclibc/./lib/libcrypt.so.*': No such file or directory cp: cannot stat '/home/wyl/NVMP/nvmp/../sdk/soc/t31x/uclibc-toolchain-0.9.33/mips-gcc472-glibc216-64bit/mips-linux-gnu/libc/uclibc/./lib/libdl-*.so': No such file or directory cp: cannot stat '/home/wyl/NVMP/nvmp/../sdk/soc/t31x/uclibc-toolchain-0.9.33/mips-gcc472-glibc216-64bit/mips-linux-gnu/libc/uclibc/./lib/libdl.so.*': No such file or directory cp: cannot stat '/home/wyl/NVMP/nvmp/../sdk/soc/t31x/uclibc-toolchain-0.9.33/mips-gcc472-glibc216-64bit/mips-linux-gnu/libc/uclibc/./lib/libm-*.so': No such file or directory cp: cannot stat '/home/wyl/NVMP/nvmp/../sdk/soc/t31x/uclibc-toolchain-0.9.33/mips-gcc472-glibc216-64bit/mips-linux-gnu/libc/uclibc/./lib/libm.so.*': No such file or directory cp: cannot stat '/home/wyl/NVMP/nvmp/../sdk/soc/t31x/uclibc-toolchain-0.9.33/mips-gcc472-glibc216-64bit/mips-linux-gnu/libc/uclibc/./lib/librt-*.so': No such file or directory cp: cannot stat '/home/wyl/NVMP/nvmp/../sdk/soc/t31x/uclibc-toolchain-0.9.33/mips-gcc472-glibc216-64bit/mips-linux-gnu/libc/uclibc/./lib/librt.so.*': No such file or directory SHELL= /home/wyl/NVMP/nvmp/staging_dir/host/bin/flock /home/wyl/NVMP/nvmp/tmp/.root-copy.flock -c 'cp -fpR /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/tmp-libc/. /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/' rm -rf /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/tmp-libc touch /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/stamp/.libc_installed rm -rf /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/tmp-libgcc mkdir -p /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/stamp /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/tmp-libgcc for file in ./lib/libgcc_s.so.*; do dir=`dirname $file` ; install -d -m0755 /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/tmp-libgcc/$dir ; cp -fpR /home/wyl/NVMP/nvmp/../sdk/soc/t31x/uclibc-toolchain-0.9.33/mips-gcc472-glibc216-64bit/mips-linux-gnu/libc/uclibc/$file /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/tmp-libgcc/$dir/ ; done ; exit 0 cp: cannot stat '/home/wyl/NVMP/nvmp/../sdk/soc/t31x/uclibc-toolchain-0.9.33/mips-gcc472-glibc216-64bit/mips-linux-gnu/libc/uclibc/./lib/libgcc_s.so.*': No such file or directory SHELL= /home/wyl/NVMP/nvmp/staging_dir/host/bin/flock /home/wyl/NVMP/nvmp/tmp/.root-copy.flock -c 'cp -fpR /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/tmp-libgcc/. /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/' rm -rf /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/tmp-libgcc touch /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/stamp/.libgcc_installed WARNING: skipping libssp -- package not selected rm -rf /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/tmp-libstdcpp mkdir -p /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/stamp /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/tmp-libstdcpp for file in ./usr/lib/libstdc++.so.*; do dir=`dirname $file` ; install -d -m0755 /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/tmp-libstdcpp/$dir ; cp -fpR /home/wyl/NVMP/nvmp/../sdk/soc/t31x/uclibc-toolchain-0.9.33/mips-gcc472-glibc216-64bit/mips-linux-gnu/libc/uclibc/$file /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/tmp-libstdcpp/$dir/ ; done ; exit 0 cp: cannot stat '/home/wyl/NVMP/nvmp/../sdk/soc/t31x/uclibc-toolchain-0.9.33/mips-gcc472-glibc216-64bit/mips-linux-gnu/libc/uclibc/./usr/lib/libstdc++.so.*': No such file or directory SHELL= /home/wyl/NVMP/nvmp/staging_dir/host/bin/flock /home/wyl/NVMP/nvmp/tmp/.root-copy.flock -c 'cp -fpR /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/tmp-libstdcpp/. /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/' rm -rf /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/tmp-libstdcpp touch /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/stamp/.libstdcpp_installed rm -rf /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/tmp-libpthread mkdir -p /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/stamp /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/tmp-libpthread for file in ./lib/libpthread{*.so*,.so.*}; do dir=`dirname $file` ; install -d -m0755 /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/tmp-libpthread/$dir ; cp -fpR /home/wyl/NVMP/nvmp/../sdk/soc/t31x/uclibc-toolchain-0.9.33/mips-gcc472-glibc216-64bit/mips-linux-gnu/libc/uclibc/$file /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/tmp-libpthread/$dir/ ; done ; exit 0 cp: cannot stat '/home/wyl/NVMP/nvmp/../sdk/soc/t31x/uclibc-toolchain-0.9.33/mips-gcc472-glibc216-64bit/mips-linux-gnu/libc/uclibc/./lib/libpthread*.so*': No such file or directory cp: cannot stat '/home/wyl/NVMP/nvmp/../sdk/soc/t31x/uclibc-toolchain-0.9.33/mips-gcc472-glibc216-64bit/mips-linux-gnu/libc/uclibc/./lib/libpthread.so.*': No such file or directory SHELL= /home/wyl/NVMP/nvmp/staging_dir/host/bin/flock /home/wyl/NVMP/nvmp/tmp/.root-copy.flock -c 'cp -fpR /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/tmp-libpthread/. /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/' rm -rf /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/tmp-libpthread touch /home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/root-ingenic/stamp/.libpthread_installed WARNING: skipping librt -- package not selected WARNING: skipping libgfortran -- package not selected WARNING: skipping ldd -- package not selected WARNING: skipping ldconfig -- package not selected make[3]: Leaving directory '/home/wyl/NVMP/nvmp/package/toolchain' make[3]: Entering directory '/home/wyl/NVMP/nvmp/package/hotplug2' CFLAGS="-Os -pipe -march=mips32r2 -g -fgnu89-inline -I/home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/usr/include -I/home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/include -I/home/wyl/NVMP/nvmp/../sdk/soc/t31x/uclibc-toolchain-0.9.33/mips-gcc472-glibc216-64bit/mips-linux-gnu/libc/uclibc/usr/include " CXXFLAGS="-Os -pipe -march=mips32r2 -g -I/home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/usr/include -I/home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/include -I/home/wyl/NVMP/nvmp/../sdk/soc/t31x/uclibc-toolchain-0.9.33/mips-gcc472-glibc216-64bit/mips-linux-gnu/libc/uclibc/usr/include " LDFLAGS="-L/home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/usr/lib -L/home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/usr/lib/nvmp/libs -L/home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/lib -L/home/wyl/NVMP/nvmp/../sdk/soc/t31x/uclibc-toolchain-0.9.33/mips-gcc472-glibc216-64bit/mips-linux-gnu/libc/uclibc/usr/lib -L/home/wyl/NVMP/nvmp/../sdk/soc/t31x/uclibc-toolchain-0.9.33/mips-gcc472-glibc216-64bit/mips-linux-gnu/libc/uclibc/lib " make -j1 -C /home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/hotplug2-201/. AR=mips-linux-gnu-ar AS="mips-linux-gnu-gcc -c -Os -pipe -march=mips32r2 -g -fgnu89-inline" LD=mips-linux-gnu-ld NM=mips-linux-gnu-nm CC="mips-linux-gnu-gcc" GCC="mips-linux-gnu-gcc" CXX="mips-linux-gnu-g++" RANLIB=mips-linux-gnu-ranlib STRIP=mips-linux-gnu-strip OBJCOPY=mips-linux-gnu-objcopy OBJDUMP=mips-linux-gnu-objdump SIZE=mips-linux-gnu-size CROSS="mips-linux-gnu-" ARCH="mips" COPTS="-Os -pipe -march=mips32r2 -g -fgnu89-inline" STATIC_WORKER="fork" ; make[4]: Entering directory '/home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/hotplug2-201' mips-linux-gnu-gcc -Os -pipe -march=mips32r2 -g -fgnu89-inline -DSTATIC_WORKER=1 -c -o hotplug2.o hotplug2.c In file included from hotplug2.c:1:0: hotplug2.h:3:20: fatal error: signal.h: No such file or directory compilation terminated. <builtin>: recipe for target 'hotplug2.o' failed make[4]: *** [hotplug2.o] Error 1 make[4]: Leaving directory '/home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/hotplug2-201' Makefile:69: recipe for target '/home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/hotplug2-201/.built' failed make[3]: *** [/home/wyl/NVMP/nvmp/build_dir/target-mips-openwrt-linux-uclibc-c510wv1/hotplug2-201/.built] Error 2 make[3]: Leaving directory '/home/wyl/NVMP/nvmp/package/hotplug2' package/Makefile:105: recipe for target 'package/hotplug2/compile' failed make[2]: *** [package/hotplug2/compile] Error 2 make[2]: Leaving directory '/home/wyl/NVMP/nvmp' package/Makefile:101: recipe for target '/home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/stamp/.package_compile' failed make[1]: *** [/home/wyl/NVMP/nvmp/staging_dir/target-mips-openwrt-linux-uclibc-c510wv1/stamp/.package_compile] Error 2 make[1]: Leaving directory '/home/wyl/NVMP/nvmp' /home/wyl/NVMP/nvmp/include/toplevel.mk:277: recipe for target 'world' failed make: *** [world] Error 2
最新发布
08-20
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值