2014年4月25日 星期五

Xubuntu更新至14.04發生symbol 'grub_term_highlight_color' not found


我也只是更新OS而已就,天呀 ><

更新完重新開機,掛點Orz





根據
https://help.ubuntu.com/community/Grub2/Installing#via_ChRoot
參考via ChRoot
我的是sda,系統安裝在sda0
  1. sudo mount /dev/sda0 /mnt
  2. for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
  3. sudo chroot /mnt
  4. grub-install --recheck /dev/sda
  5. update-grub
  6. CTRL-D離開chroot
  7. sudo reboot
  8. 從硬碟順利開機

2014年4月23日 星期三

WinCE disable DHCP fail window

DHCP無法使用時,WinCE會顯示"A DHCP Server could not be contacted",
可透過下面registry進行設定
[HKEY_LOCAL_MACHINE\Comm\Tcpip\Parms]
   DisableCachedLeaseDialog: REG_DWORD

[HKEY_LOCAL_MACHINE\Comm\Tcpip\Parms ]
   AutoCfg : REG_DWORD

參考下面網址
http://msdn.microsoft.com/en-us/library/ee494881.aspx
http://msdn.microsoft.com/en-us/library/aa922356.aspx

2014年4月14日 星期一

Linux支援exFAT

安裝exfat-fuseexfat-utils
sudo add-apt-repository ppa:relan/exfat
sudo apt-get update
sudo apt-get install exfat-fuse exfat-utils
  1. 格式化,mkfs.exfat /dev/sd??
  2. 建立名稱,exfatlabel /dev/sd?? label_name

2014年4月8日 星期二

Linux常用軟體

文書:
evince - PDF viewer
gedit - 類似UltraEdit
Mousepad - 類似Windows記事本(輕量)
Leafpad - 類似Windows記事本(輕量)
LibreOffice - 類似Windows Office軟體
OnlyOffice - 類似Windows Office軟體
Evolution - 類似Office Outlook軟體
Thunderbird - 類似Office Outlook軟體
GHex - Hex編輯軟體



繪圖:
Gimp - Linux上的Photoshop
Gnome-Paint - Linux上的小畫家
Pinta-Linux上的小畫家
gthumb - 照片瀏覽軟體
shotwell - 照片瀏覽軟體
gpicview - 圖片瀏覽軟體(輕量)
ristretto - 圖片瀏覽軟體(輕量)

多媒體:
Audacity - 聲音編輯軟體
Avidemux - 影片編輯軟體
OpenShot - 影片編輯軟體
Kdenlive - 影片編輯軟體
WinFF - 轉檔軟體
VLC - 強大的播放器
lxmusic - 音樂播放器(輕量)
audacious - 音樂管理軟體
gnome-media-player - 影片播放器(輕量)
xfburn - 燒錄軟體(輕量)
guvcview - Webcam軟體
xfce4-Screenshooter - 抓取桌面軟體

網路:
Chrome - 瀏覽器(豐富)
Firefox - 瀏覽器(豐富)
Midori - 瀏覽器(輕量)
Filezilla - 同時有Windows及Linux版本的FTP軟體
gFTP - Linux FTP軟體
Skype - 擁有各平台支援的通訊軟體
Dropbox - 擁有各平台支援的網路硬碟
Transmission - BT軟體
uGet - 下載軟體,支援BT
DavMail - 支援POP3、IMAP、Exchange收發信件

安裝Chrome
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
sudo sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list'
sudo apt-get update
sudo apt-get install google-chrome-stable

安裝Firefox
sudo add-apt-repository ppa:mozillateam/firefox-next
sudo apt-get update
sudo apt-get install firefox

安裝Filezilla
sudo add-apt-repository ppa:n-muench/programs-ppa
sudo apt-get update
sudo apt-get install filezilla

安裝Pinta
sudo add-apt-repository ppa:pinta-maintainers/pinta-stable
sudo apt-get update
sudo apt-get install pinta

安裝Dropbox
cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -
~/.dropbox-dist/dropboxd

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FC918B335044912E
sudo add-apt-repository "deb http://linux.dropbox.com/ubuntu precise main"
sudo apt-get update
sudo apt-get install dropbox 

安裝uGetAria2
sudo add-apt-repository ppa:plushuang-tw/uget-stable
sudo apt-get update
sudo apt-get install uget

sudo add-apt-repository ppa:t-tujikawa/ppa
sudo apt-get update
sudo apt-get install aria2

安裝nautilus plug-ins
sudo apt-get install nautilus-dropbox - 透由檔案總管管理Dropbox

sudo apt-get install nautilus-open-terminal - 右鍵開啟命令列視窗
sudo apt-get install nautilus-compare - 比較軟體

sudo apt-add-repository ppa:nae-team/ppa
sudo apt-get update
sudo apt-get install nautilus-open-as-root - 使用root權限開啟

2014年3月25日 星期二

Linux使用Serial Port

  • dmesg |grep tty   // 確認serial使用狀況
  • setserial -g /dev/ttyS0
  • getty
  • minicom

2014年3月20日 星期四

Android Intel CedarTrail整合MTK MT7610U USB WiFi Dongle

1. 首先拿到WiFi driver,看一下driver的Makefile
  • 看來這driver並非Kernel driver,可以直接丟到driver下並透由menuconfig選擇。
  • 這driver是可以直接在Linux PC環境下編譯的。
P.S. 因為改成Kernel driver很麻煩,所以改了一下Android.mk的描述,儘量不改driver。

2. 將driver放到Kernel底下
  • 如果直接編譯driver,會出現沒有.config的設定。
  • 也非Kernel driver所用的makefile,無法跟著Kernel一起編譯。

3. 修改Kernel底下的Android.mk,增加WiFi driver路徑描述
    $(mk_kernel) oldnoconfig
    $(mk_kernel) $(KERNEL_TARGET) $(if $(MOD_ENABLED),modules)
    $(hide) $(ACP) -fp $(BUILT_KERNEL_TARGET) $@
    $(if $(FIRMWARE_ENABLED),$(mk_kernel) ... ... ...
    $(mk_kernel) -C XXXu
    cp $(CURDIR)/kernel/XXXu/MODULE/os/linux/XXXu_sta.ko     
    $(KBUILD_OUTPUT)/drivers/net/
    cp $(CURDIR)/kernel/XXXu/NETIF/os/linux/XXXu_sta_net.ko
    $(KBUILD_OUTPUT)/drivers/net/
    cp $(CURDIR)/kernel/XXXu/UTIL/os/linux/XXXu_sta_util.ko
    $(KBUILD_OUTPUT)/drivers/net/

  • 改完後,在Kernel編譯完後,會自動編譯WiFi driver。
  • 編譯完後會將WiFi driver拷貝到output driver路徑下。

4. 將所有的drivers拷貝到Platform目錄下

5. 在Platform/Platform.mk修改mk檔,將driver及wpa_supplicant.conf包進image
    PRODUCT_COPY_FILES += \
    $(LOCAL_PATH)/XXXu_sta.ko:system/XXXu_sta.ko \
    $(LOCAL_PATH)/XXXu_sta_util.ko:system/XXXu_sta_util.ko \
    $(LOCAL_PATH)/XXXu_sta_net.ko:system/XXXu_sta_net.ko \
    $(LOCAL_PATH)/XXXSTA.dat:system/XXXSTA.dat \
    $(LOCAL_PATH)/wpa_supplicant.conf:data/wpa_supplicant.conf \


6. wpa_supplicant.conf寫法如下
    update_config=1
    ctrl_interface=DIR=/data/system/wpa_supplicant GROUP=wifi
    eapol_version=1
    ap_scan=1
    fast_reauth=1


7. 在BoardConfig.mk修改WiFi設定如下
    # This enables the wpa wireless driver
    #BOARD_WPA_SUPPLICANT_DRIVER := NL80211
    BOARD_WPA_SUPPLICANT_DRIVER := WEXT
    #BOARD_WPA_SUPPLICANT_PRIVATE_LIB ?= private_lib_driver_cmd
    WPA_SUPPLICANT_VERSION := VER_0_5_X

P.S. Driver是搭配WPA_SUPPLICANT VER_0_5_X版本

8. 在platform_defconfig設定相關所需要用到的config,如wext

9. 在init.rc載入driver module
    insmod system/XXXu_sta_util.ko
    insmod system/XXXu_sta.ko
    insmod system/XXXu_sta_net.ko


    mkdir /data/misc 01771 system misc
    # give system access to wpa_supplicant.conf for backup and restore
    mkdir /data/misc/wifi 0770 wifi wifi
    mkdir /data/misc/wifi/sockets 0770 wifi wifi
    mkdir /data/system 0771 system system
    mkdir /data/system/wpa_supplicant 0771 wifi wifi
    chmod 0771 /data/system/wpa_supplicant
    chown wifi wifi /data/misc/wifi/wpa_supplicant.conf   
    chmod 0660 /data/misc/wifi/wpa_supplicant.conf
    chown wifi wifi /data/wpa_supplicant.conf   
    chmod 0660 /data/wpa_supplicant.conf

10. 因為WiFi driver是走libhardware_legacy架構,wifi.c需要做對應修改
  • 修正相關檔案路徑
static const char SUPP_CONFIG_FILE[]    = "/data/wpa_supplicant.conf";
  • 因為已在init.rc載入driver,所以直接return 1
int is_wifi_driver_loaded() {
... ... ...
... ... ...
... ... ...
#ifdef WIFI_DRIVER_MODULE_PATH
... ... ...
... ... ...
... ... ...
#else
    return 1;
#endif

}
  • 已經定義了ctrl_interface=,所以code裡拿掉
int update_ctrl_interface(const char *config_file) {
... ... ...
... ... ...
... ... ...

    if (!strcmp(config_file, SUPP_CONFIG_FILE)) {
        property_get("wifi.interface", ifc, WIFI_TEST_INTERFACE);
    } else {
        strcpy(ifc, CONTROL_IFACE_PATH);
    }
#if 0
    if ((sptr = strstr(pbuf, "ctrl_interface="))) {
        char *iptr = sptr + strlen("ctrl_interface=");
        int ilen = 0;
        int mlen = strlen(ifc);
        int nwrite;
        if (strncmp(ifc, iptr, mlen) != 0) {
            LOGE("ctrl_interface != %s", ifc);
            while (((ilen + (iptr - pbuf)) < nread) && (iptr[ilen] != '\n'))
                ilen++;
            mlen = ((ilen >= mlen) ? ilen : mlen) + 1;
            memmove(iptr + mlen, iptr + ilen + 1, nread - (iptr + ilen + 1 - pbuf));
            memset(iptr, '\n', mlen);
            memcpy(iptr, ifc, strlen(ifc));
            destfd = open(config_file, O_RDWR, 0660);
            if (destfd < 0) {
                LOGE("Cannot update \"%s\": %s", config_file, strerror(errno));
                free(pbuf);
                return -1;
            }
            write(destfd, pbuf, nread + mlen - ilen -1);
            close(destfd);
        }
    }
#endif

    free(pbuf);
    return 0;
}

11. 利用dmesg、logcat、netcfg、wpa_supplicant及wpa_cli觀看並除錯

12. WiFi正常運作了

P.S. 如果在Android看不到WiFi選項,請做下面的步驟
  • 在裝置的/system/etc/permissions中會列出裝置支援的設備
  • 相關設備支援檔案放在本機的frameworks/base/data/etc
  • 要支援WiFi,
將本機frameworks/base/data/etc下的android.hardware.wifi.xml
放置到裝置/system/etc/permissions