2014年12月31日 星期三

WiFi 手動無線網路 wlan0 連線


說明:

這邊介紹 iwconfig 的手動連線方法,
其中一點要注意的是,它不支援 WPA 加密格式
它只適用 WEP 加密處理,因此以本校 STUST 為例是適用的!

零。入門


# 查看Wifi Driver型號,上網下載驅動程式


lspci
lspci -v
lspci -k



以我的電腦為例,輸出:

        
01:00.0 Network controller: Intel Corporation WiFi Link 5100
Subsystem: Intel Corporation WiFi Link 5100 AGN
        Flags: fast devsel, IRQ 16
        Memory at e3500000 (64-bit, non-prefetchable) [size=8K]
        Capabilities: [c8] Power Management version 3
        Capabilities: [d0] MSI: Enable- Count=1/1 Maskable- 64bit+
        Capabilities: [e0] Express Endpoint, MSI 00
        Capabilities: [100] Advanced Error Reporting
        Capabilities: [140] Device Serial Number 00-22-fb-ff-ff-66-59-5a
        Kernel driver in use: iwlwifi


# 安裝WiFi驅動


tar xfva /home/lin/MyDriver/iwlwifi-5000-ucode-5.4.A.11.tar.gz
cd iwlwifi-5000-ucode-5.4.A.11/
cp iwlwifi-5000-1.ucode /lib/firmware/
reboot

############################################################

壹。手動 iwconfig 無線網路設定

一、清除網路設定

1. 有線網路 eth0 清除

route del default eth0
ifconfig eth0 down

順便補充無線網路 wlan0 清除:
ifconfig wlan0 down
iwconfig wlan0 txpower off

二、 開啟無線網路

iwconfig wlan0 txpower on
ifconfig wlan0 up

三、掃描可用的無線 AP 站

iwlist wlan0 scan | grep -i essid

輸出如下:
                    ESSID:"Alias 4G"
                    ESSID:"stust_p203"
                    ESSID:"stust_p205"
                    ESSID:"EDIMAX"
                    ESSID:"S611-AP"
                    ESSID:"stust_p306"
                    ESSID:"S210B"
                    ESSID:"stust_teacher"
                    ESSID:"stust_p302"
                    ESSID:"stust_j304"
                    ESSID:"stust_teacher"
                    ESSID:"stust_s412@"
                    ESSID:"stust_teacher"
                    ESSID:"stust_p503"
                    ESSID:"stust_teacher"
                    ESSID:"stust_s314"
                    ESSID:"stust_j402"
                    ESSID:"stust_s414"
                    ESSID:"stust_s514"
                    ESSID:"p501_PM"

四、設定 ESSID

假設要連線上面掃到的 ESSID:"stust_p203"
iwconfig wlan0 essid stust_p503

檢查 ESSID 設定:
iwconfig wlan0

五、取得 IP

dhclient -v wlan0

成功取得後,即可得到 AP 所發出來的 ip !

--------------------------------------------------------------------------------

貳。修改網路設定檔 (可支援 WPA 加密格式 )

一、同上面方式清除 eth0,開啟 wlan0

1. 有線網路 eth0 清除

route del default eth0
ifconfig eth0 down

2. 開啟無線網路

iwconfig wlan0 txpower on
ifconfig wlan0 up

二、修改設定檔

vi /etc/network/interfaces

加入下面設定 (原本的網路不變動,或用 # 註解掉)
auto wlan0
iface wlan0 inet dhcp
       wpa-ssid        "AP-ESSID"
       wpa-psk         "password"

三、重啟網路

/etc/init.d/networking restart
或
service networking restart

四、查看有無找到 ip

ifconfig




參、推薦圖形操作軟體

Wicd 網路管理程式(適用 Wireless)










2014年12月30日 星期二

tmpfs 於 Linux 用記憶體當硬碟用 ( RAMDisk)



因為筆者所使用的 Linux 是安裝在 m-SATA 上,
硬態硬碟 SSD 等類型的硬碟有一定的寫入次數限制,
因此我在裝 Linux 時,把一些做 "寫入" 動作高的目錄,
且無需儲存資料的分割區放到 RAM 裡面跑。



一、哪些目錄可以掛載到 tmpfs 中?

本筆者將「暫存用」的區塊掛載到 tmpfs,主要如下:
/tmp
/var/spool
/var/tmp
/var/lib/apt/lists
/var/cache/apt/archives

還有常用的瀏灠器 Chrome、Iceweasel (Firefox) ,
也常常做暫存寫入的動作,
若把它們都移到 tmpfs ,
則理論上可以延長 SSD 或 m-SATA 的壽命。

二、規劃分割區

本筆者使用的硬體規格如下:
Laptop : Acer v3-772g
RAM : 20 GB
m-SATA : 120 GB
HDD (7200 rpm) : 750 GB
HDD2 (5400 rpm) : 1 TB

依我所使用的需求來規劃,設計如下:
黃色區塊為 Linux Debian
白色區塊為 Windows 8.1
灰色區塊為兩系統共用的資料區

三、設定 /etc/fstab

sudo vi /etc/fstab
tmpfs   /tmp                    tmpfs   size=10G,noatime,mode=1777       0 0
tmpfs   /var/spool              tmpfs   size=10G,noatime,mode=1777       0 0
tmpfs   /var/tmp                tmpfs   size=10G,noatime,mode=1777       0 0
tmpfs   /var/lib/apt/lists      tmpfs   size=10G,noatime,mode=1777       0 0
tmpfs   /var/cache/apt/archives tmpfs   size=10G,noatime,mode=1777       0 0

記得測試及檢查,否則下次開機可能會有問題!
mount -a
mount
df -h

四、設定 Iceweasel

1. 開啟 iceweasel 瀏灠器
2. 於網址列輸入:about:config
3. 點擊滑鼠右鍵、new
4. String : browser.cache.disk.parent_directory
5. Value : /tmp

五、設定 Google-Chrom

1. 以下面指令來開 Chrom ,可以用 alias 加到 .bashrc

/opt/google/chrome/google-chrome --disk-cache-dir="/tmp"

2. 修改開啟設定檔

vi /usr/share/applications/google-chrome.deskto

Change
Exec=/usr/bin/google-chrome-stable %U

to
#Exec=/usr/bin/google-chrome-stable %U
Exec=/opt/google/chrome/google-chrome --disk-cache-dir="/tmp" %U

六、接著到家目錄下設定:

cd ~.cache
rm -rf google-chrome mozilla
ln -s /tmp/ google-chrome
ln -s /tmp mozilla








Reference:
http://blog.longwin.com.tw/2011/01/linux-firefox-chrome-ram-2011/

http://allisonxu.pixnet.net/blog/post/22698958-ubuntu-8.10---eeebuntu-2.0--%E8%A8%93%E7%B7%B4%E6%88%91%E7%9A%84%E6%80%AA%E5%92%96%E5%B0%8F%E7%99%BD(eeepc-7

http://blog.longwin.com.tw/2006/01/ram_disk_build_method/

http://linux-wiki.cn/wiki/zh-tw/SSD_(%E5%9B%BA%E6%80%81%E7%A1%AC%E7%9B%98)

http://yblog.org/archive/index.php/11734

2014年12月18日 星期四

Easy2Boot 多系統 USB 重灌碟製作

Easy2Boot 是一套可以製作多系統 USB 安裝碟的工具,
最重要的是可以直接載入多個 .iso 映像檔,來做開機碟。

官網:http://www.easy2boot.com/


接下來進入正式筆記教學,
下面的各個軟體都是網路開放的免軟體,
可以直接 Google 搜尋下載,
同時本站的雲端也有備份,也可以直接從本站下載。

一、目標
以本作者所使用的為例,我希望如下系統整合開機碟:
  • Windows 7 整合版 9 in 1 容量約 4.18 GB
  • Windows 8.1 容量約 3.60 GB
  • Debian-7.7.0_amd64 容量約 635  MB
  • Ubuntu-12.04.04_amd64 容量約 733  MB
  • CentOS-7.0_amd64 容量約 3.86  GB
  • 及其它小工具…
總計需要容量:至少約 13 GB

二、準備東西


三、執行軟體 RMPrepUSB

依軟體步驟來格式化隨身碟為 NTFS 或 FAT32 ,
本文使用 NTFS 為了可以裝大於 4 GB 的 ISO 檔,
按照軟體內步驟 1 - 6 即可。(後面選項全選 yes)


四、安裝 Grup4dos 於 MBR (後面選項全選 yes)



五、解壓 Easy2Boot

請先暫時關閉防毒軟體,避免 easy2boot 的檔案被誤判為電腦病毒,
接著直接將 Easy2Boot_v1.61.zip 解壓縮到 USB 目錄下:



六、植入 ISO 檔

依檔案分類,直接複製、貼上至 USB 內的 _ISO 目錄下:

_ISO\WINDOWS\WIN7\Windows7_9in1.iso
_ISO\WINDOWS\WIN8\Windows_8.1.iso
_ISO\LINUX\CentOS-7.0_amd64.iso
_ISO\LINUX\Debian-7.7.0_amd64.iso
_ISO\LINUX\Ubuntu-12.04.4_amd64.iso













Referencd:

Start Menu 8 修改 Win8 開始功能表為 Win7 樣式


此軟體可以使 Windows 8.1 的「開始功能表」的樣式,
改為之前 Windows 7 的樣式。

iobit 官方下載點
本站雲端下載點


操作設定相當簡單,
1. 開始按鈕圖示:可以改變桌面左下角「開始功能表」的圖示。
2. 樣式:選 Windows -> 平面樣式,即可回到 Win 7 下的那種感覺。
3. 其他設定依照個人需求、喜好。










Reference:
http://www.iobit.com/iobitstartmenu8.php
http://briian.com/9906/start-menu-8.html

2014年12月16日 星期二

U-Boot 指令及建立 uEnv.txt


一、U-Boot 指令介紹

接續前一章節 Rootfs 植入 sdcard.img 開機 ,
當我們進入 U-Boot# 後 ,有以下幾個常用的指令介紹:

0. help

指令總覽

1. mmc

跟 SD/MMC 有關的指令及輸出。

下面 mmc list 可以印出,
目前裝置所接有的 SD Card 代號為 mmc 0
U-Boot# mmc list
OMAP SD/MMC: 0

下面 mmc part 可以印出,
mmc 0 這裝置之磁區分割 (Partition)
U-Boot# mmc part
Partition Map for MMC device 0  --   Partition Type: DOS

Part Start Sector Num Sectors UUID  Type
  1 2048       163840     925db895-01 0b Boot
  2 165888     1931264    925db895-02 83

下面 mmc info 可以看到目前 sd card 相關資訊。
U-Boot# mmc info
Device: OMAP SD/MMC
Manufacturer ID: aa
OEM: 5859
Name: QEMU! 
Tran Speed: 25000000
Rd Block Len: 512
SD version 1.0
High Capacity: No
Capacity: 1 GiB
Bus Width: 4-bit


2. bdinfo

查看嵌入式版子資訊,
其中比較需要注意的是第五行 -> start    = 0x80000000,
這跟我們載入開機的記憶體位址有關。
U-Boot# bdinfo
arch_number = 0x0000060A
boot_params = 0x80000100
DRAM bank   = 0x00000000
-> start    = 0x80000000
-> size     = 0x08000000
DRAM bank   = 0x00000001
-> start    = 0x88000000
-> size     = 0x08000000
eth0name    = usb_ether
ethaddr     = (not set)
current eth = usb_ether
ip_addr     = 
baudrate    = 115200 bps
TLB addr    = 0x8FFF0000
relocaddr   = 0x8FF4C000
reloc off   = 0x0FE4C000
irq_sp      = 0x8EF2BEE0
sp start    = 0x8EF2BED0

3. ls

查看 SD Card 內容之檔案目錄。

其中 mmc 0:1 是指 sdcard.img1:
U-Boot# ls mmc 0:1
  1852516   u-boot 
   392152   u-boot.bin 
    51100   mlo 
   392216   u-boot.img 
  2533720   uimage 

5 file(s), 0 dir(s)

其中 mmc 0:2 是指 sdcard.img2:
U-Boot# ls mmc 0:2
       4096 .
       4096 ..
      16384 lost+found
       4096 bin
       4096 boot
       4096 dev
       4096 etc
       4096 home
       4096 lib
       4096 media
       4096 mnt
       4096 opt
       4096 proc
       4096 root
       4096 run
       4096 sbin
       4096 selinux
       4096 srv
       4096 sys
       4096 tmp
       4096 usr
       4096 var

4. reset

重新啟動 U-Boot

5. printenv

印出 u-boot environment 設定檔。


二、建立 uEnv.txt


0. 進入 U-Boot#

參考前一章 Rootfs 植入 sdcard.img 開機 ,
最後面用 runsdcard.sh 進到 U-boot 內。
runsdcard.sh 內容如下:
qemu-system-arm -M beagle -m 512 -nographic -sd sdcard.img

1. printenv -> uEnv.txt

於 U-Boot# 內使用指令 printenv 將全部內容複製,
並貼上建立一個 uEnv.txt ,其原始內容如下:
arch=arm
baudrate=115200
beaglerev=C4
board=beagle
board_name=beagle
bootargs=console=ttyO2,115200n8 mpurate=auto buddy=none camera=none vram=12M omapfb.mode=dvi:640x480MR-16@60 omapdss.def_disp=dvi root=ubi0:rootfs ubi.mtd=4 rootfstype=ubifs
bootcmd=run findfdt; mmc dev ${mmcdev}; if mmc rescan; then if run userbutton; then setenv bootenv uEnv.txt;else setenv bootenv user.txt;fi;echo SD/MMC found on device ${mmcdev};if run loadbootenv; then echo Loaded environment from ${bootenv};run importbootenv;fi;if test -n $uenvcmd; then echo Running uenvcmd ...;run uenvcmd;fi;if run loadimage; then run mmcboot;fi;fi;run nandboot;setenv bootfile uImage;if run loadimage; then run loadfdt;run mmcbootz; fi;
bootdelay=1
bootdir=/
bootenv=uEnv.txt
bootfile=uImage
bootpart=0:1
buddy=none
camera=none
console=ttyO2,115200n8
cpu=armv7
defaultdisplay=dvi
dieid#=51454d5551454d555400000051454d55
dvimode=640x480MR-16@60
ethact=usb_ether
fdt_high=0xffffffff
fdtaddr=0x80f80000
fdtfile=omap3-beagle.dtb
findfdt=if test $beaglerev = AxBx; then setenv fdtfile omap3-beagle.dtb; fi; if test $beaglerev = Cx; then setenv fdtfile omap3-beagle.dtb; fi; if test $beaglerev = C4; then setenv fdtfile omap3-beagle.dtb; fi; if test $beaglerev = xMAB; then setenv fdtfile omap3-beagle-xm-ab.dtb; fi; if test $beaglerev = xMC; then setenv fdtfile omap3-beagle-xm.dtb; fi; if test $fdtfile = undefined; then echo WARNING: Could not determine device tree to use; fi;
importbootenv=echo Importing environment from mmc ...; env import -t $loadaddr $filesize
loadaddr=0x80000000
loadbootenv=fatload mmc ${mmcdev} ${loadaddr} ${bootenv}
loadfdt=run validatefdt; load mmc ${bootpart} ${fdtaddr} ${bootdir}/${fdtfile}
loadimage=load mmc ${bootpart} ${loadaddr} ${bootdir}/${bootfile}
loadramdisk=load mmc ${bootpart} ${rdaddr} ${bootdir}/${ramdisk}
mmcargs=setenv bootargs console=${console} ${optargs} mpurate=${mpurate} buddy=${buddy} camera=${camera} vram=${vram} omapfb.mode=dvi:${dvimode} omapdss.def_disp=${defaultdisplay} root=${mmcroot} rootfstype=${mmcrootfstype}
mmcboot=echo Booting from mmc ...; run mmcargs; bootm ${loadaddr}
mmcbootz=echo Booting with DT from mmc${mmcdev} ...; run mmcargs; bootz ${loadaddr} - ${fdtaddr}
mmcdev=0
mmcroot=/dev/mmcblk0p2 rw
mmcrootfstype=ext4 rootwait
mpurate=auto
nandargs=setenv bootargs console=${console} ${optargs} mpurate=${mpurate} buddy=${buddy} camera=${camera} vram=${vram} omapfb.mode=dvi:${dvimode} omapdss.def_disp=${defaultdisplay} root=${nandroot} rootfstype=${nandrootfstype}
nandboot=echo Booting from nand ...; run nandargs; nand read ${loadaddr} 280000 400000; bootm ${loadaddr}
nandroot=ubi0:rootfs ubi.mtd=4
nandrootfstype=ubifs
ramargs=setenv bootargs console=${console} ${optargs} mpurate=${mpurate} buddy=${buddy} vram=${vram} omapfb.mode=dvi:${dvimode} omapdss.def_disp=${defaultdisplay} root=${ramroot} rootfstype=${ramrootfstype}
ramboot=echo Booting from ramdisk ...; run ramargs; bootm ${loadaddr}
ramdisk=ramdisk.gz
ramroot=/dev/ram0 rw ramdisk_size=65536 initrd=0x81000000,64M
ramrootfstype=ext2
rdaddr=0x81000000
soc=omap3
stderr=serial
stdin=serial
stdout=serial
usbtty=cdc_acm
userbutton=if gpio input 173; then run userbutton_xm; else run userbutton_nonxm; fi;
userbutton_nonxm=gpio input 7;
userbutton_xm=gpio input 4;
validatefdt=if test $beaglerev = xMAB; then if test ! -e mmc ${bootpart} ${bootdir}/${fdtfile}; then setenv fdtfile omap3-beagle-xm.dtb; fi; fi;
vendor=ti
ver=U-Boot 2014.07 (Oct 14 2014 - 12:06:49)
vram=12M

2. 整理語法

先將 uEnv.txt 備份為 uEnv.txt.sh ,
並對其內容做語法整理,方便我們了解它寫的內容,
我的整理如下:
arch=arm
baudrate=115200
beaglerev=C4
board=beagle
board_name=beagle

bootargs=console=ttyO2,115200n8
         mpurate=auto
         buddy=none
         camera=none
         vram=12M
         omapfb.mode=dvi:640x480MR-16@60
         omapdss.def_disp=dvi
         root=ubi0:rootfs
         ubi.mtd=4
         rootfstype=ubifs

bootcmd=run findfdt;
        mmc dev ${mmcdev};
        if mmc rescan;  then
                if run userbutton; then
                        setenv bootenv uEnv.txt;
                else
                        setenv bootenv user.txt;
                fi;
                echo SD/MMC found on device ${mmcdev};
                if run loadbootenv; then
                        echo Loaded environment from ${bootenv};
                        run importbootenv;
                fi;
                if test -n $uenvcmd; then
                        echo Running uenvcmd ...;
                        run uenvcmd;
                fi;
                if run loadimage; then
                        run mmcboot;
                fi;
        fi;
        run nandboot;
        setenv bootfile uImage;
        if run loadimage; then
                run loadfdt;
                run mmcbootz;
        fi;

bootdelay=1
bootdir=/
bootenv=uEnv.txt
bootfile=uImage
bootpart=0:1
buddy=none
camera=none
console=ttyO2,115200n8
cpu=armv7
defaultdisplay=dvi
dieid#=51454d5551454d555400000051454d55
dvimode=640x480MR-16@60
ethact=usb_ether
fdt_high=0xffffffff
fdtaddr=0x80f80000
fdtfile=omap3-beagle.dtb

findfdt=if test $beaglerev = AxBx; then
                setenv fdtfile omap3-beagle.dtb;
        fi;
        if test $beaglerev = Cx; then
                setenv fdtfile omap3-beagle.dtb;
        fi;
        if test $beaglerev = C4; then
                setenv fdtfile omap3-beagle.dtb;
        fi;
        if test $beaglerev = xMAB; then
                setenv fdtfile omap3-beagle-xm-ab.dtb;
        fi;
        if test $beaglerev = xMC; then
                setenv fdtfile omap3-beagle-xm.dtb;
        fi;
        if test $fdtfile = undefined; then
                echo WARNING: Could not determine device tree to use;
        fi;

importbootenv=echo Importing environment from mmc ...;
              env import -t $loadaddr $filesize

loadaddr=0x80000000
loadbootenv=fatload mmc ${mmcdev} ${loadaddr} ${bootenv}
loadfdt=run validatefdt; load mmc ${bootpart} ${fdtaddr} ${bootdir}/${fdtfile}
loadimage=load mmc ${bootpart} ${loadaddr} ${bootdir}/${bootfile}
loadramdisk=load mmc ${bootpart} ${rdaddr} ${bootdir}/${ramdisk}

mmcargs=setenv bootargs console=${console} ${optargs} mpurate=${mpurate} buddy=${buddy} camera=${camera} vram=${vram} omapfb.mode=dvi:${dvimode} omapdss.def_disp=${defaultdisplay} root=${mmcroot} rootfstype=${mmcrootfstype}

mmcboot=echo Booting from mmc ...;
run mmcargs;
bootm ${loadaddr}

mmcbootz=echo Booting with DT from mmc${mmcdev} ...;
         run mmcargs;
         bootz ${loadaddr} - ${fdtaddr}

mmcdev=0
mmcroot=/dev/mmcblk0p2 rw
mmcrootfstype=ext4 rootwait
mpurate=auto

nandargs=setenv bootargs console=${console} ${optargs} mpurate=${mpurate} buddy=${buddy} camera=${camera} vram=${vram} omapfb.mode=dvi:${dvimode} omapdss.def_disp=${defaultdisplay} root=${nandroot} rootfstype=${nandrootfstype}

nandboot=echo Booting from nand ...;
         run nandargs;
         nand read ${loadaddr} 280000 400000;
         bootm ${loadaddr}

nandroot=ubi0:rootfs ubi.mtd=4
nandrootfstype=ubifs

ramargs=setenv bootargs console=${console} ${optargs} mpurate=${mpurate} buddy=${buddy} vram=${vram} omapfb.mode=dvi:${dvimode} omapdss.def_disp=${defaultdisplay} root=${ramroot} rootfstype=${ramrootfstype}

ramboot=echo Booting from ramdisk ...;
        run ramargs;
        bootm ${loadaddr}
ramdisk=ramdisk.gz
ramroot=/dev/ram0 rw ramdisk_size=65536 initrd=0x81000000,64M
ramrootfstype=ext2
rdaddr=0x81000000
soc=omap3
stderr=serial
stdin=serial
stdout=serial
usbtty=cdc_acm

userbutton=if gpio input 173; then
                run userbutton_xm;
           else
                run userbutton_nonxm;
           fi;

userbutton_nonxm=gpio input 7;
userbutton_xm=gpio input 4;

validatefdt=if test $beaglerev = xMAB; then
                if test ! -e mmc ${bootpart} ${bootdir}/${fdtfile}; then
                        setenv fdtfile omap3-beagle-xm.dtb;
                fi;
            fi;

vendor=ti
ver=U-Boot 2014.07 (Oct 14 2014 - 12:06:49)
vram=12M

3. 修改 uEnv.txt內容

我們看的是 uEnv.txt.sh ,
真正最後要載入 sdcard.img 的是 uEnv.txt ,
所以邊看 .sh 那份做修改,同時也要改 uEnv.txt,
兩者同步進行,改的主要項目為:

  • zImage -> uImage
  • loadaddr=0x80200000 -> loadaddr=0x80000000
  • bootpart=0:2 -> bootpart=0:1
  • mmcrootfstype=ext3 -> mmcrootfstype=ext4
  • bootdir=/boot -> bootdir=/

4. 植入 uEnv.txt -> sdcard1

將修變好的 uEnv.txt 植入到 sdcard partition 1 內。
mount -o loop,offset=$[512*2048] sdcard.img /mnt
rsync-av ~/qrmu_img/bootloader/uEnv.txt /mnt

5. 執行 runsdcard.sh

sh runsdcard.sh

執行結果,若正確的話,
應該要自動且快速通過 U-boot ,並直接載入 kernel ,
做正確的開機程序。











Reference:
http://pominglee.blogspot.tw/2013/12/uboot.html

http://pominglee.blogspot.tw/2014/12/uboot.html

2014年12月9日 星期二

Rootfs 植入 sdcard.img 開機


一、將 rootfs 植入到 sdcard.img

0. 準備材料

參考前面文章 建立虛擬 SD Card
sdcard1 要有以下檔案:
MLOu-bootu-boot.binu-boot.imguImage

參考文章 建立 Rootfs
sdcard2 要有 rootfs

1. 先做備份

cp sdcard.img sdcard.img.bak

2. 做連接 + 掛載

前面幾個章節有學到兩個做 offset 的方法:

方法一:

su
losetup /dev/loop0 sdcard.img
losetup -o $[512*2048] /dev/loop1 /dev/loop0
losetup -o $[512*165888] /dev/loop2 /dev/loop0
mkdir /mnt/sdcard1
mkdir /mnt/sdcard2

mount /dev/loop1 /mnt/sdcard1
mount /dev/loop2 /mnt/sdcard2

方法二:

mkdir /mnt/sdcard1
mkdir /mnt/sdcard2
mount -o loop,offset=$[512*2048] sdcard.img /mnt/sdcard1
mount -o loop,offset=$[512*165888] sdcard.img /mnt/sdcard2

3. 設定 Rootfs 設定檔

參考前面章節 建立 Rootfs 其中的「四、設定 Rootfs」,
修改幾個檔案…
~/qemu_img/rootfs/etc/fstab
~/qemu_img/rootfs/etc/inittab
~/qemu_img/rootfs/etc/network/interfaces
~/qemu_img/rootfs/etc/resolv.conf
~/qemu_img/rootfs/etc/hostname

等 rootfs 完全整理好了,再一次全部 copy 到 /mnt/sdcard2 下。
rsync -av ~/qemu_img/rootfs/* /mnt/sdcard2

4. 做 sdcard 開機用 shell script

vi runsdcard.sh
qemu-system-arm -M beagle -m 512 -nographic -sd sdcard.img

5. 進入 U-Boot 開機進 ARM-Linux

run mmcargs
fatload mmc 0:1 0x80000000 uImage
bootm 0x80000000









2014年12月2日 星期二

一次建立20個使用者帳號

利用 Bash / Shell Script 來一次完成建置 20 個使用者帳號,
且要給每個使用者加入不同的登入密碼,
並且強制要求第一次登入後,要修改使用者密碼。

設定群組:s100
建立帳號:s100a000 ~ s100a020
設置密碼:`date +%N` 來產生亂數

vi buildAccount.sh
# !/bin/bash
# 2014/12/02    Author:Kai-Lin Liao
# Create 20 user
# account:   s100a000 ~ s100a020,
# usergroup: s100

# Setting Parameter
GROUP=s100
USER_HEAD=s100a0

# Check root
if [ `whoami` != "root" ]
then
        echo "===== Permision Deny ====="
        echo "You need login root."
        echo
        exit 0
fi

# Create group
groupadd s100

# Create account 0~9
for i in `seq 0 9`
do
        USER_NAME=${USER_HEAD}0$i
        # Setting account password is ramdon
        PASSWD=`date +%N`
        echo "Creating User 0$i: $USER_NAME"
        echo "Set Password: $PASSWD"
        useradd -m -s /bin/bash -g $GROUP $USER_NAME
        echo $USER_NAME:$PASSWD | chpasswd
        chage -d 0 $USER_NAME
done

# Create account 10~20
for i in `seq 10 20`
do
        USER_NAME=${USER_HEAD}$i
        # Setting account password is ramdon
        PASSWD=`date +%N`
        echo "Creating User $i: $USER_NAME"
        echo "Set Password: $PASSWD"
        useradd -m -s /bin/bash -g $GROUP $USER_NAME
        echo $USER_NAME:$PASSWD | chpasswd
        chage -d 0 $USER_NAME
done



刪除剛剛建的群組:s100,及使用者s100a000 ~ s100a020

vi deleteAccount.sh
# !/bin/bash
# 2014/12/02    Author:Kai-Lin Liao
# Delete 20 user 
# account:   s100a000 ~ s100a020,

# Setting Parameter
GROUP=s100
USER_HEAD=s100a0

# Check root
if [ `whoami` != "root" ]
then
        echo "===== Permision Deny ====="
        echo "You need login root."
        echo
        exit 0
fi


# Create account 0~9
for i in `seq 0 9`
do
        USER_NAME=${USER_HEAD}0$i
        echo "Delete User 0$i: $USER_NAME"
        userdel -r $USER_NAME
done

# Create account 10~20
for i in `seq 10 20`
do
        USER_NAME=${USER_HEAD}$i
        echo "Delete User $i: $USER_NAME"
        userdel -r $USER_NAME
done

# Delete group
groupdel $GROUP

建立橋接網路 br10


0. 整體架構圖
我們要將網路規劃為下圖,
由網際網路(Internet) 連到實體機網卡(eth0),
從實體機網卡(eth0) 建立一個橋接網路(br10),
最後將橋接網路連接到 QEMU 虛擬機( 設 192.168.10.20 ),
並在虛擬機上面建個 Web Server !

其中,從實體機到虛擬機可以互相 ping ,
且實體機開瀏灠器可以連到虛擬機架的 Web Server。

1. 使用 runarm.sh 開啟虛擬機
參考文章 用 QEMU 來開機 arm.img
vi runarm.sh
# !/bin/bash
#
# Run arm.img

qemu-system-arm -M versatilepb -m 512 \
-kernel ~qemu_image/vmlinuz-3.2.0-4-versatile \
-initrd ~qemu_image/initrd.img-3.2.0-4-versatile \
-hda ~qemu_image/arm.img \
-append "root=/dev/sda1" &

2. 安裝 Web server
於虛擬機,安機:
sudo apt-get install apache2

虛擬機關機
halt

3. 備份並修改 runarm.sh
cp runarm.sh runarm.sh.org

vi runarm.sh
qemu-system-arm -M versatilepb -m 512 \
-kernel ~qemu_image/vmlinuz-3.2.0-4-versatile \
-initrd ~qemu_image/initrd.img-3.2.0-4-versatile \
-hda ~qemu_image/arm.img \
-net nic,macaddr=" MAC Address " -net bridge,br=br10 \
-append "root=/dev/sda1" &

4. 安裝 bridge 套件
於實體機
sudo apt-get install bridge-utils uml-utilities

5. 編輯設定 br10 (以 P503 教室為例)
於實體機
vi /etc/network/interfaces

## ==== 本機端 lo ====
auto lo
iface lo inet loopback
## ==== 實體網卡 eth0 ====
allow-hotplug eth0
#iface eth0 inet dhcp
iface eth0 inet static
 address 120.117.72.XX
 netmask 255.255.255.128
 gateway 120.117.72.126
 dns-nameserver 120.117.2.1
## ==== 橋接 br10 ====
auto br10
iface br10 inet static
 address 192.168.10.1
 netmask 255.255.255.0
# 這邊 gateway 是用實體機 eth0 的 ip
 gateway 120.117.72.XX
 bridge_ports tap0
 bridge_fd 9
 bridge_hello 2
 bridge_maxage 12
 bridge_stp off

6. 重啟網卡並確認網路連線
於實體機
/etc/init.d/networking restart
brctl show
ifconfig
ping 192.168.10.1
ping 8.8.8.8

7. 設定 QEMU 設定檔
於實體機
sudo chmod u+s /usr/local/libexec/qemu-bridge-helper

sudo vi /usr/local/etc/qemu/bridge.conf
allow br10

8. 執行修改好的 runarm.sh 重啟虛擬機
於實體機
sh runarm.sh

9. 修改虛擬機網路設定
於虛擬機
vi /etc/network/interfaces
auto lo
iface lo inet loopback
## ==== 虛擬機的 eth0 ====
allow-hotplug eth0
iface eth0 inet static
 address 192.168.10.20
 netmask 255.255.255.0
# 這邊 gateway 要設實體機所建的 br10 之 ip
 gateway 192.168.10.1
# 這邊以學校為例,nameserver 要用同實體機一樣
 dns-nameserver 120.117.2.1

10. 重啟虛擬機網卡並測試
於虛擬機
/etc/init.d/networking restart

測試 br10
ping 192.168.10.1

測試實體機 eth0
ping 120.117.72.XX

啟動 Web Server
/etc/init.d/apache2 restart

11. 至實體機測試
於實體機
ping 192.168.10.20

開啟瀏灠器 -> 192.168.10.20
可以看到 「It's works!!」

12. 設定防火牆,讓虛擬機連到外網
於實體機
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A INPUT -i br10 -j ACCEPT
iptables -t net -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE


















Reference:
http://pominglee.blogspot.tw/2014/12/br10.html

2014年12月1日 星期一

如何將硬碟從GPT格式轉換成MBR

隨機預裝Win8的電腦,硬碟爲GPT格式的,如果需要安裝Win7等早期版本系統,需要轉換爲MBR格式的,使用Diskpart命令即可完成轉換。
操作步驟:
注意:轉換硬碟格式需要清空硬碟中的所有分區和數據,在操作前,請保存好硬碟中所有重要數據。

1.使用Win7光碟或者USB引導,進入系統安裝界面。
2.按Shift + F10打開命令提示符。
3.輸入”Diskpart”(不用輸入引號,下同),並按ENTER,進入操作界面
4.輸入:”list disk”,查看硬碟信息。注意看硬碟容量來選擇。
5.輸入:”select disk 0”,選擇disk 0爲當前操作的硬碟。(注意是否為系統安裝的disk,通常預設為disk 0,但也有例外,所以在執行這部前請再三做確認!)
6.輸入:”Clean”,清空當前硬碟分區。
7.輸入:”convert mbr”,轉換爲MBR分區。
8.操作完成,關閉此命令提示符窗口,繼續按照正常的方法安裝Win7系統即可。
擴展知識:convert命令的其它用法:
convert  basic     -將硬碟從動態轉換爲基本。
convert  dynamic  -將硬碟從基本轉換爲動態。
convert  gpt      -將硬碟從MBR轉換爲GPT。
convert  mbr     -將硬碟從GPT轉換爲MBR。


引用:http://home.gamer.com.tw/creationDetail.php?sn=2117049