如果曾經有參加過台北的 Ubuntu Hardware Summit,應該都會拿到一本橘色小手冊 Ubuntu Debugging,當中有提到可以設定幾個 Linux kernel 編譯選項中
CONFIG_USB_SERIAL_CONSOLE=y CONFIG_USB_SERIAL=y CONFIG_USB_SERIAL_PL2303=y
然後就可以在 Linux kernel 開機參數加上
console=tty console=ttyUSB0,115200n8
這樣就可以透過 USB to RS-232 傳輸線將 Linux kernel 訊息輸出到另外一台電腦上面,為什麼要這樣做有時候是因為 Linux kernel 開機時是什麼畫面也沒有,也不曉得中間到底發生了什麼事情,又或者是 Linux kernel 訊息出現的太快了,來不及看清楚完整的訊息一下子就過去了,也沒有來得及儲存到檔案系統上面就當機了,有著許許多多不同的情況可能會需要。
但是實際上要怎麼做才能夠編譯出 Ubuntu 上面所使用的 Linux kernel 呢?
首先是將 Ubuntu 所使用的 Linux kernel 的原始碼下載回來。
$ git clone git://kernel.ubuntu.com/ubuntu/ubuntu-xenial.git
然後我自己 commit 了一些修改 (主要是針對 amd64)。
$ git diff HEAD^..HEAD diff --git a/debian.master/abi/4.4.0-22.39/amd64/generic.modules b/debian.master/abi/4.4.0-22.39/amd64/generic.modules index e1b9392..53d7914 100644 --- a/debian.master/abi/4.4.0-22.39/amd64/generic.modules +++ b/debian.master/abi/4.4.0-22.39/amd64/generic.modules @@ -2873,7 +2873,6 @@ pixcir_i2c_ts pkcs7_test_key pktcdvd pktgen -pl2303 platform_lcd plat_nand plat-ram @@ -4236,7 +4235,6 @@ usblp usbmon usbmouse usbnet -usbserial usb-serial-simple usbsevseg usb-storage diff --git a/debian.master/config/annotations b/debian.master/config/annotations index 825012f..167ab6e 100644 --- a/debian.master/config/annotations +++ b/debian.master/config/annotations @@ -6609,7 +6609,7 @@ CONFIG_USB_STORAGE_ENE_UB6250 policy<{'amd64': 'm', 'arm64': ' CONFIG_USB_UAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'powerpc': 'm', 'ppc64el': 'm'}> # Menu: Device Drivers >> USB support >> Support for Host-side USB >> USB Serial Converter support -CONFIG_USB_SERIAL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'powerpc': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL policy<{'amd64': 'y', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'powerpc': 'm', 'ppc64el': 'm'}> CONFIG_USB_SERIAL_GENERIC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'powerpc': 'y', 'ppc64el': 'y'}> CONFIG_USB_SERIAL_SIMPLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'powerpc': 'm', 'ppc64el': 'm'}> CONFIG_USB_SERIAL_AIRCABLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'powerpc': 'm', 'ppc64el': 'm'}> @@ -6641,7 +6641,7 @@ CONFIG_USB_SERIAL_MOS7715_PARPORT policy<{'amd64': 'y', 'arm64': ' CONFIG_USB_SERIAL_MOS7840 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'powerpc': 'm', 'ppc64el': 'm'}> CONFIG_USB_SERIAL_MXUPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'powerpc': 'm', 'ppc64el': 'm'}> CONFIG_USB_SERIAL_NAVMAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'powerpc': 'm', 'ppc64el': 'm'}> -CONFIG_USB_SERIAL_PL2303 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'powerpc': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_PL2303 policy<{'amd64': 'y', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'powerpc': 'm', 'ppc64el': 'm'}> CONFIG_USB_SERIAL_OTI6858 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'powerpc': 'm', 'ppc64el': 'm'}> CONFIG_USB_SERIAL_QCAUX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'powerpc': 'm', 'ppc64el': 'm'}> CONFIG_USB_SERIAL_QUALCOMM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'powerpc': 'm', 'ppc64el': 'm'}> diff --git a/debian.master/config/config.common.ubuntu b/debian.master/config/config.common.ubuntu index 505a3c7..7cb1284 100644 --- a/debian.master/config/config.common.ubuntu +++ b/debian.master/config/config.common.ubuntu @@ -8391,7 +8391,8 @@ CONFIG_USB_RIO500=m CONFIG_USB_RTL8150=m CONFIG_USB_RTL8152=m CONFIG_USB_S2255=m -CONFIG_USB_SERIAL=m +CONFIG_USB_SERIAL=y +CONFIG_USB_SERIAL_CONSOLE=y CONFIG_USB_SERIAL_AIRCABLE=m CONFIG_USB_SERIAL_ARK3116=m CONFIG_USB_SERIAL_BELKIN=m @@ -8439,7 +8440,7 @@ CONFIG_USB_SERIAL_OMNINET=m CONFIG_USB_SERIAL_OPTICON=m CONFIG_USB_SERIAL_OPTION=m CONFIG_USB_SERIAL_OTI6858=m -CONFIG_USB_SERIAL_PL2303=m +CONFIG_USB_SERIAL_PL2303=y CONFIG_USB_SERIAL_QCAUX=m CONFIG_USB_SERIAL_QT2=m CONFIG_USB_SERIAL_QUALCOMM=m
接著開始編譯 Linux kernel (在有八個 CPU cores 的電腦上)
$ CONCURRENCY_LEVEL=8 fakeroot debian/rules clean binary-generic
最後就會在上層目錄產生 Ubuntu 所使用的 Linux kernel 的 Debian packages 了。
$ ls -1 ../*.deb ../linux-cloud-tools-4.4.0-22-generic_4.4.0-22.40_amd64.deb ../linux-headers-4.4.0-22-generic_4.4.0-22.40_amd64.deb ../linux-image-4.4.0-22-generic_4.4.0-22.40_amd64.deb ../linux-image-extra-4.4.0-22-generic_4.4.0-22.40_amd64.deb ../linux-tools-4.4.0-22-generic_4.4.0-22.40_amd64.deb
這樣就可以將這些 Debian packages 拿去安裝使用了。
最後我放了一份在 http://people.ubuntu.com/~fourdollars/usb2rs232/ 上面,也許有人剛好也需要想要測試一下效果如何。
沒有留言:
張貼留言