Объясните мне пожалуйста. Я установил source ядра, хидеры. /usr/src/kernel-linus-2.6.31.6-1mdv/ в /usr/src/kernel-linus-2.6.31.6-1mdv/net/core/dev.c находится функция net_rx_action вот её код Код (Text): static void net_rx_action(struct softirq_action *h) { struct list_head *list = &__get_cpu_var(softnet_data).poll_list; unsigned long time_limit = jiffies + 2; int budget = netdev_budget; void *have; local_irq_disable(); while (!list_empty(list)) { struct napi_struct *n; int work, weight; /* If softirq window is exhuasted then punt. * Allow this to run for 2 jiffies since which will allow * an average latency of 1.5/HZ. */ if (unlikely(budget <= 0 || time_after(jiffies, time_limit))) goto softnet_break; local_irq_enable(); /* Even though interrupts have been re-enabled, this * access is safe because interrupts can only add new * entries to the tail of this list, and only ->poll() * calls can remove this head entry from the list. */ n = list_entry(list->next, struct napi_struct, poll_list); have = netpoll_poll_lock(n); weight = n->weight; /* This NAPI_STATE_SCHED test is for avoiding a race * with netpoll's poll_napi(). Only the entity which * obtains the lock and sees NAPI_STATE_SCHED set will * actually make the ->poll() call. Therefore we avoid * accidently calling ->poll() when NAPI is not scheduled. */ work = 0; if (test_bit(NAPI_STATE_SCHED, &n->state)) { work = n->poll(n, weight); trace_napi_poll(n); } WARN_ON_ONCE(work > weight); budget -= work; local_irq_disable(); /* Drivers must not modify the NAPI state if they * consume the entire weight. In such cases this code * still "owns" the NAPI instance and therefore can * move the instance around on the list at-will. */ if (unlikely(work == weight)) { if (unlikely(napi_disable_pending(n))) { local_irq_enable(); napi_complete(n); local_irq_disable(); } else list_move_tail(&n->poll_list, list); } netpoll_poll_unlock(have); } out: local_irq_enable(); #ifdef CONFIG_NET_DMA /* * There may not be any more sk_buffs coming right now, so push * any pending DMA copies to hardware */ dma_issue_pending_all(); #endif return; softnet_break: __get_cpu_var(netdev_rx_stat).time_squeeze++; __raise_softirq_irqoff(NET_RX_SOFTIRQ); goto out; } Мне нужно воспроизвести её в коде своего модуля, копирую её и называю my_net_rx_action Когда начинаю компилировать модуль, он выдаёт ошибки WARNING: "netdev_budget" [/home/featurelles/module/init.ko] undefined! WARNING: "per_cpu__netdev_rx_stat" [/home/featurelles/module/init.ko] undefined! Эти переменные находятся в скопированной мной функции my_net_rx_action Что нужно сделать, чтоб эти параметры брались из source ядра. ( ведь эти переменные используются в /usr/src/kernel-linus-2.6.31.6-1mdv/net/core/dev.c в функции net_rx_action )
А зачем компании вкладывают деньги в проекты под лицензией GPL , какой смысл? Программистам должен кто-то платить за разработку, тоесть он должен на когото работать. А если собственная разработка? не работая на когото.. то как тогда заработать? если деньги не за продажу, а за разработку ((
Эт вы про систему зароботка red hat ? Вообще как заработать программисту под линекс, в нашем не лёгком мире?