This is an old trick but a fun one. The ThinkPad X1 Carbon has no built-in Ethernet port. Instead it comes with a USB to Ethernet adapter. The adapter uses the ASIX AX88772 chip, which Linux has supported since time immemorial. But support for the particular adapter shipped by Lenovo was only added in Linux 3.7.
This was a problem for me, since I wanted to use a Debian installer with a 3.2 kernel. I could set up a build environment for that particular kernel and recompile the module. But this seemed like an annoying yak to shave when I just wanted to get the machine working.
The patch to support the Lenovo adapter just adds a new USB device ID to an existing driver:
}, {
+ // Lenovo U2L100P 10/100
+ USB_DEVICE (0x17ef, 0x7203),
+ .driver_info = (unsigned long) &ax88772_info,
+}, {
// ASIX AX88772B 10/100
USB_DEVICE (0x0b95, 0x772b),
.driver_info = (unsigned long) &ax88772_info,
As a quick-and-dirty solution, we can edit the compiled kernel module asix.ko, changing that existing device ID (0x0b95, 0x772b) to the Lenovo one (0x17ef, 0x7203). Since x86 CPUs are little-endian, this involves changing the bytes
95 0b 2b 77
to
ef 17 03 72
I wanted to do this within the Debian installer without rebooting. Busybox sed does not support hex escapes, but printf does:
sed $(printf 's/\x95\x0b\x2b\x77/\xef\x17\x03\x72/') \
/lib/modules/$(uname -r)/kernel/drivers/net/usb/asix.ko \
> /tmp/asix.ko
(It's worth checking that none of those bytes have untoward meanings as ASCII characters in a regular expression. As it happens, sed does not recognize + (aka \x2b) as repetition unless preceded by a backslash.)
Then I loaded the patched module along with its dependencies. A simple way is
modprobe asix
rmmod asix
insmod /tmp/asix.ko
And that was enough for me to complete the install over Ethernet. Of course, once everything is set up, it would be better to compile a properly-patched kernel using make-kpkg. I haven't got around to it yet because wireless is working great. :)
I followed the instructions but running into some problems. I did verify I have the proper vendor and product id as the article suggests.
ReplyDeleteGet the following
insmod: error inserting './asix.ko': -1 Unknown symbol in module.
Any ideas?
This is so great. It's so old school that nobody would think about it anymore. I just tried it and it's great, thanks.
ReplyDelete