How can I change an Atheros wireless NIC region (regulatory domain) in Ubuntu?

There is a CONFIG_ATH_USER_REGD variable in OpenWrt that allows the user to override the default settings of the wireless NIC. Unfortunately grepping the Arch kernel config doesn't seem to have that, and since OpenWrt has its fair share of hacking and patches, I don't know if that's something they added or that's provided e.g. in compat-wireless.

Does this setting exists for Ubuntu or BackTrack-Linux?

Update I don't think CRDA will do any good to it.

[10661.269580] cfg80211: Restoring regulatory settings while preserving user preference for: BO
[10661.269589] cfg80211: Calling CRDA to update world regulatory domain
[10661.276975] cfg80211: Ignoring regulatory request Set by core since the driver uses its own custom regulatory domain
[10661.276982] cfg80211: World regulatory domain updated:
[10661.276986] cfg80211:     (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp)
[10661.276992] cfg80211:     (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[10661.276998] cfg80211:     (2457000 KHz - 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm)
[10661.277003] cfg80211:     (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm)
[10661.277008] cfg80211:     (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[10661.277014] cfg80211:     (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[10661.277036] cfg80211: Calling CRDA for country: BO
[10661.285251] cfg80211: Ignoring regulatory request Set by user since the driver requires its own regulatory domain to be set first
[10661.285258] cfg80211: Regulatory domain changed to country: BO
[10661.285262] cfg80211:     (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp)
[10661.285268] cfg80211:     (2402000 KHz - 2482000 KHz @ 40000 KHz), (N/A, 3000 mBm)
[10661.285273] cfg80211:     (5735000 KHz - 5835000 KHz @ 40000 KHz), (N/A, 3000 mBm)

Reading further at http://wireless.kernel.org/en/users/Drivers/ath

Atheros devices share the same regulatory implementation. All devices have a regulatory domain code programmed into their EEPROM. The programmed regulatory domain code can be of three kinds:

custom world regulatory domains programmed ISO-3166-1-numeric country code (with a few exemptions) a regulatory pair group number


I did have the same problem as yours yesterday. After some experiment, I found a solution:

sudo apt-get install crda
sudo vi /etc/default/crda

then change the line REGDOMAIN= to your country code, eg.

REGDOMAIN=AU

and restart.

BTW, my system is Ubuntu 12.04 with 3.2.x kernel and AR9485 wireless.