Δημοσιεύτηκε: 22 Απρ 2014, 01:15
- Κώδικας: Επιλογή όλων
0: hci0: Bluetooth
Soft blocked: yes
Hard blocked: no
1: phy0: Wireless LAN
Soft blocked: no
Hard blocked: yes
Διαβάζοντας εδώ http://ubuntuforums.org/showthread.php?t=2172044 και εδώ http://ubuntuforums.org/showthread.php?t=2103062 δεν έβγαλα και πολύ άκρη..
Συνοπτικά κάνω τα εξής:
1) κατεβάζω απ' εδώ https://www.kernel.org/pub/linux/kernel ... /v3.9-rc4/ το "compat-drivers-3.9-rc4-2-s.tar.bz2"
2) ./scripts/driver-select ath9k
3) make και πέρνω το επόμενο μήνυμα λάθους:
- Κώδικας: Επιλογή όλων
make -C /lib/modules/3.13.0-24-generic/build M=/home/xristos/compat-drivers-3.9-rc4-2-s modules
make[1]: Entering directory `/usr/src/linux-headers-3.13.0-24-generic'
CC [M] /home/xristos/compat-drivers-3.9-rc4-2-s/net/wireless/sysfs.o
/home/xristos/compat-drivers-3.9-rc4-2-s/net/wireless/sysfs.c:134:2: error: unknown field ‘dev_attrs’ specified in initializer
.dev_attrs = ieee80211_dev_attrs,
^
/home/xristos/compat-drivers-3.9-rc4-2-s/net/wireless/sysfs.c:134:2: warning: initialization from incompatible pointer type [enabled by default]
/home/xristos/compat-drivers-3.9-rc4-2-s/net/wireless/sysfs.c:134:2: warning: (near initialization for ‘ieee80211_class.suspend’) [enabled by default]
make[3]: *** [/home/xristos/compat-drivers-3.9-rc4-2-s/net/wireless/sysfs.o] Error 1
make[2]: *** [/home/xristos/compat-drivers-3.9-rc4-2-s/net/wireless] Error 2
make[1]: *** [_module_/home/xristos/compat-drivers-3.9-rc4-2-s] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-3.13.0-24-generic'
make: *** [modules] Error 2
4) ανοίγω το αρχείο "sysfs.c" και προσπαθώ να δω τι γίνεται. Απλή C είναι, δε φαίνεται να έχει κάτι.. Δοκιμάζω να βάλω σε σχόλιο τη γραμμή αλλά παίρνω 30 errors.
Υποθέτω ότι τα warnings μπορούν να αγνοηθούν, γι αυτό αναφέρω το μοναδικό error που είχα.
To επίμαχο σημείο στο αρχείο C είναι αυτό:
- Κώδικας: Επιλογή όλων
/*
* This file provides /sys/class/ieee80211/<wiphy name>/
* and some default attributes.
*
* Copyright 2005-2006 Jiri Benc <jbenc@suse.cz>
* Copyright 2006 Johannes Berg <johannes@sipsolutions.net>
*
* This file is GPLv2 as found in COPYING.
*/
#include <linux/device.h>
#include <linux/module.h>
#include <linux/netdevice.h>
#include <linux/nl80211.h>
#include <linux/rtnetlink.h>
#include <net/cfg80211.h>
#include "sysfs.h"
#include "core.h"
#include "rdev-ops.h"
static inline struct cfg80211_registered_device *dev_to_rdev(
struct device *dev)
{
return container_of(dev, struct cfg80211_registered_device, wiphy.dev);
}
#define SHOW_FMT(name, fmt, member) \
static ssize_t name ## _show(struct device *dev, \
struct device_attribute *attr, \
char *buf) \
{ \
return sprintf(buf, fmt "\n", dev_to_rdev(dev)->member); \
}
SHOW_FMT(index, "%d", wiphy_idx);
SHOW_FMT(macaddress, "%pM", wiphy.perm_addr);
SHOW_FMT(address_mask, "%pM", wiphy.addr_mask);
static ssize_t name_show(struct device *dev,
struct device_attribute *attr,
char *buf) {
struct wiphy *wiphy = &dev_to_rdev(dev)->wiphy;
return sprintf(buf, "%s\n", dev_name(&wiphy->dev));
}
static ssize_t addresses_show(struct device *dev,
struct device_attribute *attr,
char *buf)
{
struct wiphy *wiphy = &dev_to_rdev(dev)->wiphy;
char *start = buf;
int i;
if (!wiphy->addresses)
return sprintf(buf, "%pM\n", wiphy->perm_addr);
for (i = 0; i < wiphy->n_addresses; i++)
buf += sprintf(buf, "%pM\n", &wiphy->addresses[i].addr);
return buf - start;
}
static struct device_attribute ieee80211_dev_attrs[] = {
__ATTR_RO(index),
__ATTR_RO(macaddress),
__ATTR_RO(address_mask),
__ATTR_RO(addresses),
__ATTR_RO(name),
{}
};
static void wiphy_dev_release(struct device *dev)
{
struct cfg80211_registered_device *rdev = dev_to_rdev(dev);
cfg80211_dev_free(rdev);
}
static int wiphy_uevent(struct device *dev, struct kobj_uevent_env *env)
{
/* TODO, we probably need stuff here */
return 0;
}
static int wiphy_suspend(struct device *dev, pm_message_t state)
{
struct cfg80211_registered_device *rdev = dev_to_rdev(dev);
int ret = 0;
rdev->suspend_at = get_seconds();
if (rdev->ops->suspend) {
rtnl_lock();
if (rdev->wiphy.registered)
ret = rdev_suspend(rdev);
rtnl_unlock();
}
return ret;
}
static int wiphy_resume(struct device *dev)
{
struct cfg80211_registered_device *rdev = dev_to_rdev(dev);
int ret = 0;
/* Age scan results with time spent in suspend */
cfg80211_bss_age(rdev, get_seconds() - rdev->suspend_at);
if (rdev->ops->resume) {
rtnl_lock();
if (rdev->wiphy.registered)
ret = rdev_resume(rdev);
rtnl_unlock();
}
return ret;
}
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
static const void *wiphy_namespace(struct device *d)
{
struct wiphy *wiphy = container_of(d, struct wiphy, dev);
return wiphy_net(wiphy);
}
#endif
struct class ieee80211_class = {
.name = "ieee80211",
.owner = THIS_MODULE,
.dev_release = wiphy_dev_release,
.dev_attrs = ieee80211_dev_attrs,
.dev_uevent = wiphy_uevent,
.suspend = wiphy_suspend,
.resume = wiphy_resume,
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
.ns_type = &net_ns_type_operations,
.namespace = wiphy_namespace,
#endif
};
int wiphy_sysfs_init(void)
{
return class_register(&ieee80211_class);
}
void wiphy_sysfs_exit(void)
{
class_unregister(&ieee80211_class);
}