2014年6月18日 星期三

ASUS NB PU301LA 安裝 Lubuntu 14.04

NB 我覺得螢幕 13.3" 剛好,不會太小,也不會太重,但選擇較少、價格較高。ASUS 看一看只有 UX32LAPU301LA 可選,使用處理器 i5 4200U 可在 NT$30000 以下。前者只有 1.45 kg,4GB 記憶體直接焊在主機板上,另有一個 DIMM 插槽可擴充。後者 1.75 kg,記憶體只有一個 DIMM 插槽,擴充需要買 8GB 把原有的 4GB 換掉。不過它是商用機,應該較耐用吧,最後選擇了它。

331 x 234.5 x 26.3 mm (寬x長x高)

拿到的機器 BIOS Version 是 204,作業系統是 Windows 7 Professional

開機熱鍵: f2 進 BIOS[註1],f9 可重新全新安裝 Windows 7[註2],esc 進入開機選單。

安裝步驟

  1. 在另一台電腦用 UNetbootin 製作 USB 開機碟,使用之前就已經下載的 mini.iso,發行版選 Ubuntu 14.04_NetInstall_x64[註3]
  2. 按電源鍵後銀幕出現影像再按 ese 進入開機選單,選隨身碟
  3. 我安裝 English 版,過程大都使用預設值,除了
    • 要輸入帳號密碼
    • Partition disks 選
      • Guided -- use entire disk[註4]
      • SCSI2 (0, 0, 0) (sdb)
      • Write the changes to disks 時改選 <Yes>
    • Software selection 時選了 [*] Lubuntu Desktop[註5]
    • Install the GRUB boot loader on a hard disk
  4. 重開機按 esc 再用隨身碟開機,ctrl+alt+t 開終端機,執行 sudo grub-install /dev/sda 安裝 GRUB。(由於安裝時將 GRUB 安裝到隨身碟了)
  5. sudo apt-get install hime-chewing,Preference->Input Method 選 hime,重新登入
  6. 其它見 Lubuntu 13.10 安裝與使用
[註1]沒看到說明書所言,有 LaunchCSM 可 Enabled 及 SecureBootControl 可 Disabled,或許預設已經是這樣。
[註2]試過沒說明書所言,有「重新整理您的電腦」、「重設您的電腦」、「進階選項」可選,或許 Windows 8 才有。
[註3]原本以為必須安裝 64-bit 作業系統才能支援 8GB RAM,後來看到處理器的 PAE 支援,讓 IA-32 的 RAM 位址線從 32-bit 增加到 64-bit,使得 RAM 限制從 4GB 變成 64GB。每個 process 的 virtual address 一樣是 32-bit,作業系統用 page tables 對應到實體大於 4GB 的 RAM。但又看到這篇比較 32-bit 跟 64-bit Ubuntu 14.04 的效能,幾乎都是 64-bit 的較好,所以還是用 64-bit。
[註4]用整個硬碟,就不能從硬碟回復 Windows 作業系統了。
[註5]發生過接著沒去網路下載軟體套件而造成失敗,重頭安裝就正常沒再發生。

PU301LA 的設計:
    • caps lock 的顯示 LED 直接做在按鍵上,容易發現 caps lock 按到了。
    • 網路接口像個夾子可以夾住,旁邊又有狀態 LED 顯示
    • SD Card 不能整個卡片沒入
後續:
  • Suspend 有問題:安裝 hibernate 就好了 [參考]。可能後來有自動更新,移除 hibernate 也是正常的。
  • Touchpad 捲軸功能? 
  • dd 寫入 sd 有問題:可能後來有自動更新,變正常了。
  • 2014/08/25:旅遊奔波後沒偵測到電池,重新裝上去正常了。後來又出現問題送修。
  • 2015/07/15:更新到 Lubuntu 14.10,再更新到 Lubuntu 15.04
  • 2016/11/14:啟用 Fn + F5/F6 螢幕亮度控制 [參考]。這應該是 ASUS 筆電特有的問題,此時已經是 Lubuntu 16.04 Xenial。
    • vi ~/.config/openbox/lubuntu-rc.xml
      # 將 C-F10 改為 XF86MonBrightnessDown
      # 將 C-F11 改為 XF86MonBrightnessUp
      # 儲存
      openbox --reconfigure
      sudo vi /etc/default/grub
      # 將 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
      # 改為GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi_osi="
      # 儲存
      sudo update-grub
      reboot
      
  • 2019/01/29:最近偶而出現突然沒電情形。
    • 電池充飽或沒放電池也會,電池初步排除。
    • 2019/03/15 BIOS 更新為版本 206 (Oct 16 2014,升級 CPU 微代碼) 仍會
    • 換過電源供應器,仍會。
    • 軟體問題?過熱?風扇掛了?記憶體?處理器?電容?
    • 2019/05/14 插著電仍有突然沒電情況,換電源供應器。
    • 2019/06/13 vi 編輯中出現突然沒電,可見不是電源供應器問題,換回原本電源供應器。
    • 2019/06/24 vi 中突然沒電。
    • ???~2020/05/11~2021/05/10 使用外接鍵盤沒發生過
      • 2021/05/11 再次發生
      • 2022/12/27 有打開過電池一樣外接鍵盤,發生一次。
    • 2021/05/11 BIOS 更新為版本 208 (Apr 24 2019 優化系統效能)
  • 2019/02/27 使用延伸桌面:螢幕解析度 1366x768 加上外接螢幕解析度 1024x768
  • BIOS 更新 (Easy Flash 更新):BIOS → Advanced → Start Easy Flash →選擇儲存裝置、目錄、檔案
  • ASUS Battery Health Charging
  • 2019/05/09 更新為 Lubuntu 18.04
  • 2022/12/26 開始網路連線不穩定
其它參考
相關文章

2014年6月14日 星期六

HTML Symbols

特殊符號
延伸閱讀:網頁編碼

2014年6月12日 星期四

Wi-Fi Protected Setup

Wi-Fi Protected Setup (WPS) 是 Wi-Fi 聯盟於 2006 為了簡化 Wi-Fi 連線而訂定。

有幾種連線認證方式:
  1. PIN:類似 Bluetooth,雙方透過一組硬體的序號 (4 或 8 位數) 來認證建立連線。
  2. 按鍵:分別按下兩個設備的按鈕 (或是軟體模擬的按鈕) 後,即可完成連線。
  3. RFID NFC:不在 Wi-Fi 聯盟認證範圍內。
  4. USB flash:棄用

WPS 易受 brute-force 攻擊,攻擊者可在數小時內獲得 WPS 的 PIN,再去取得 WPA/WPA2 pre-shared key。所以 WPS PIN 認證需要時才打開較安全。

參考來源:
  1. https://en.wikipedia.org/wiki/Wi-Fi_Protected_Setup

AM335x booting

AM335x 開機分成兩類,記憶體開機跟週邊開機。
  • 記憶體開機是搜尋 NVRAM 上的開機程式來執行,支援的裝置有 SD/MMC (MMC0, MMC1)、NOR Flash、NAND Flash 及 SPI0 Flash。
  • 週邊開機則是下載程式來執行,支援的裝置有 UART0、Ethernet (EMAC1) bootp/tftp、USB0 slave 成 RNDIS Ethernet 作 tftp。
如果不在上述支援裝置,則要採用間接的方式。例如如果要 USB Flash 開機,則需要透過上述裝置進行階段性開機後,再讀取 USB Flash 完成最後開機。

一些名詞
SPL:Second Program Loader,也就是 Second bootloader
MLO:是 Memory Loader 縮寫?x-load?

一般開機流程:
  1. 內部 ROM 載入 SPL
  2. SPL 載入 bootloader
  3. bootloader 載入 OS
  4. OS 掛載根目錄,執行各種應用程式。

ROM

AM335x 第一個執行的程式位於處理器內部的 ROM (稱為 1st bootloader),會依照開機組態接腳 SYSBOOT[4:0] 設定的開機裝置的順序去嘗試開機程式。

例如 SYSBOOT[4:0] =
  • 10111:MMC0→SPI0→UART0→USB0
  • 11100:MMC1→MMC0→UART0→USB0 (Beaglebone Black 沒按 BOOT 鍵通電,MMC1 是 eMMC、MMC0 是 µSD)
  • 11000:SPI0→MMC0→USB0→UART0 (Beaglebone Black 按著 BOOT 鍵通電)
此時外部 SDRAM 界面還沒初始化,還不能使用,能放要執行的程式只有內部有限的 100 多 KB 的 RAM,只能載入一個夠小的程式,稱為 SPL (2nd bootloader) 。

如果開機裝置是 NOR Flash,程式是可以直接執行 (XIP, eXecute In Place),可以跳過 SPL。

SPL 和 bootloader

SPL 由於容量的限制,只能有一些陽春的 bootloader 功能,主要就是讓外部 SDRAM 可以使用,然後載入較大的程式來執行。這個較大的程式可以是最後的 OS 或應用程式,但通常是一個較完整的 bootloader,可以有彈性的設定、可以做網路下載、可以更新、解壓縮程式等功能。在開發過程中,這些 bootloader 完成後通常不太需要去更動。

SD Card 開機

SD Card 是常見開機裝置,裡面有一個稱為 boot 的 FAT 分割,用來放開機檔案。內部 ROM 會找這個分割裡叫 MLO 的檔案,載入作為 SPL。通常 MLO 是精簡版的 u-boot,會去載入另一個檔案 u-boot.img (不確定 u-boot.bin 是不是也可以) 作為 3rd bootloader,是完整版的 u-boot 。

u-boot 預設會去執行 bootcmd 指定的指令,載入 uEnv.txt 的設定、zImage 及 dtb 檔,設定 Linux kernel 參數,最後執行 Linux kernel。Linux kernel 會掛載另一個分割,通常為 ext2/3/4 檔案系統,作為 rootfs。

SD 卡內容
  • FAT 分割:boot
    • 根目錄:MLO、u-boot.img、(optional) uEnv.txt
  • ext3 分割:rootfs
    • boot 目錄:zImage、(optional) dtb 檔
上述說明是一般 SD card 開機的情況,實際上可以做許多調整,例如透過 u-boot 設定,zImage 等檔案可以放別的位置,可以不用 ext2/3/4 分割作 rootfs,也未必要用 Linux、u-boot。

SD Card 有 FAT 分割的好處是電腦都支援,可以透過 SD 讀卡機接到電腦,方便置換、修改檔案。

SPL 除了用 FAT 模式的 MLO 外,也可以用 raw 模式,放在 SD card 的第 0、256、512、768 sector,也就是第 0、128 KB、256 KB、384 KB。雖然 eMMC/eSD 跟 SD 非常相似,但只能用 raw 模式,BeagleBon Black 就有 on-board eMMC 支援開機。

USB slave 開機

BeagleBoot Project Page

UART 開機

UART0

參考

  1. http://jchuang1977.pixnet.net/blog/post/30848988 (解釋 MLO/SPL,有些錯誤。MLO 是 SPL 沒錯,但 SPL 未必是 MLO)
  2. http://beagle.s3.amazonaws.com/esc/Uboot-esc-chicago-2010.pdf
  3. AM335x ARM® Cortex™-A8 Microprocessors (MPUs) Technical Reference Manual
  4. http://processors.wiki.ti.com/index.php/The_Boot_Process
延伸閱讀
  • SPI Flash 接 BeagleBone Black 的 P9-17, 18, 21, 22,以及 P8-43 接 jumper 及 100 ohm 接地來選擇開機模式。

2014年6月7日 星期六

常見 ARM 處理器比較

處理器架構pipelineDMIPS/ MHz/ core核心數說明
ARM9EARMv5TE51.1單核SheevaPlug (88F6281)
ARM1176ARMv68, 獨立 load-store1.25單核Raspberry Pi, S3C6410@533/667MHz
Cortex-A8ARMv7-A13, dual-issue2.0單核BeagleBone Black@1GHz
Cortex-A9ARMv7-a8, multi-issue, out-of-order execution2.50最多 4 核網站說效能比 A8 好 50% 以上
ROM-7420@1GHz, Dual core
Cortex-A53ARMv8????
Cortex-A72ARMv8????
ATOM N450x86?~2.7單核,2 threadPCM-9362N@1.66GHz
後來發現 Wikipedia 的比較很清楚:Comparison of current ARM cores, List of ARM microarchitectures

參考:
延伸閱讀
  • Raspberry Pi 跟 S3C6410 同樣是 ARM1176JZ-S 核心,使用 ARMv6 架構,比起 ARMv5 (例如 XScale,Marvell 的 88F628x) 多了 SIMD,其中 J 代表 Jazelle,Z 代表,S 代表
  • T客邦《 完全看懂 ARM 處理器:RISC 與 CISC 是什麼?歷史、架構一次看透
  • Thumb1 指令集是原本 ARM 指令集的壓縮成 16-bit 的版本。而 Thumb-2 是混合 16/32-bit 的可變長度指令集。在 ARMv7 以上,GCC 預設產生 Thumb2 指令。

2014年6月6日 星期五

待命、休眠、睡眠

動作XPVistaWindows 7LinuxACPI
Suspend to RAM待命 (Standby)睡眠 (Sleep)暫停、待機 (suspend)S3
Suspend to Disk休眠 (Hibernate)S4
Suspend to RAM+Disk-睡眠交互式睡眠 (hybrid sleep)suspend hybridS3+S4


「待命」或 Windows 7 的「睡眠」是將狀態維持在記憶體 (Suspend to RAM),按電源鍵即時恢復運作,記憶體等必要的硬體仍需要一點電力。

「休眠」是將記憶體狀態存到硬碟 (Suspend to Disk),然後將電源關閉,下次開機就從硬碟回復記憶體、恢復運作。需要一些硬碟空間,且存到硬碟需要時間。

「交互式睡眠」或 Vista 的「睡眠」,其實是「待命」+「休眠」,還有電的時候用「待命」的方式恢復,沒電的時候還有「休眠」的方式恢復。

Lubuntu 14.04 的 Suspend to RAM 可以用,但「休眠」有問題。

Linux

  • Hibernate 預設停用,由於 Hibernate 在許多硬體設定運作不正常。
  • 需要 swap partition,參考 https://ubuntuhandbook.org/index.php/2021/08/enable-hibernate-ubuntu-21-10/
  • cat /sys/power/state 顯示支援的模式
    • 'freeze' (Suspend-to-Idle):永遠支援
    • 'standby' (Power-On Suspend)
    • 'mem' (Suspend-to-RAM)
    • 'disk' (Suspend-to-Disk, hibernation):需要 kernel 設 CONFIG_HIBERNATION
  • 參照 Documentation/admin-guide/pm/sleep-states.rst for a description of each of those states.
  • /sys/power/disk 顯示和設定 hibernation 建立 hibernation image 後的運作模式。The currently selected option is printed in square brackets.
    • platform:採用 platform-provided method,例如 ACPI。
    • shutdown (shut the system down)
    • reboot (reboot the system)
    • suspend:執行 Suspend-to-RAM。
    • test_resume (resume-after-hibernation test mode),參照 Documentation/power/basic-pm-debugging.txt。
  • /sys/power/image_size 控制 hibernation image 盡可能的最大限制。
  • /sys/power/pm_trace
  • 參考:https://www.kernel.org/doc/Documentation/power/interface.txt

參考

  1. windows 7的睡眠與休眠以及要注意的地方
  2. 關機、待命、休眠與睡眠
  3. [比較]待命、休眠、睡眠 模式的差異
  4. http://chris959.blogspot.tw/2013/05/linux-mac.html 

2014年6月4日 星期三

x86 OpenWrt on USB Drive

x86 OpenWrt 要灌到硬碟很簡單,只需要把產生的 bin/x86/openwrt-x86-generic-combined-ext4.img.gz 解壓縮,然後 dd 到一顆硬碟 [參考]。也可以選擇不設 CONFIG_TARGET_IMAGES_GZIP,編譯時就不會壓縮,產生的 bin/x86/openwrt-x86-generic-combined-ext4.img 可以直接 dd。

用 CF 卡應該也一樣,因為 CF 卡跟 IDE 硬碟界面一樣,不過我沒試過。

USB 隨身碟也是一樣作法,但由於預設產生的 kernel 沒有內建需要的驅動程式,會造成開機無法掛載 USB 隨身碟作為根目錄。只要把需要的驅動程式內建到 kernel 就可以,記得是 USB 相關驅動程式。後來的 OpenWrt 版本就沒有這個問題,沒再細究。

此外還有看到另一種作法,隨身碟用 FAT 檔案系統搭配 syslinux/,但我用 Linux 機器製作後,試的結果並沒成功。

參考:

延伸閱讀:

SIP header Via

所有 SIP 訊息 都要有 Via,縮寫 v。一開始的 UAC 和後續途經的每個 proxy 都會疊加一個 Via 放傳送的位址,依序作為回應的路徑。 格式 sent-protocol sent-by [ ;branch= branch ][ ; 參數 ...] s...