1. 下載下來的核心之解壓路徑;解壓指令。
2. 編譯的電腦有 n 核心,要下什麼指令讓全部核心下去跑。
3. 怎麼查看 CPU 資訊。
4. 核心選單要在哪個目錄設定?下哪個指令?
5. 核心設定檔 .config 的絕對路徑+檔名
6. 建立一個 2GB 的 sdcard.img
7. 連接 sdcard.img 到 /dev/loop0
8. 連接 /dev/loop1 到 /dev/loop0p1 重點 offset
9. 連接 /dev/loop2 到 /dev/loop0p2 重點 offset
10. 分割指令
11. 格式化指令
12. vi 操作,刪除、複製、貼上
13. 核心編譯指令(不用參數)
14. 查看目前權限;登入root指令
15. 掛載指令
16. 編譯 Hello.c 的指令
17. 為什麼要用 xz 壓縮?
18. 核心安裝到 Linux 的哪個目錄?
19. Android 是用什麼核心?
請低調,解答自己找。
lifelong learning and ongoing creation
2014年11月17日 星期一
2014年10月27日 星期一
建立虛擬 SD Card
目標是建立一個 1GB 的 sdcard.img ,其分割區如下圖:
一、先建一個空的 sdcard.img (User 權限)
(其中 bs 是 block size)dd if=/dev/zero of=sdcard.img bs=1G count=1
查看一下檔案屬性:
file sdcard.img
hexdump sdcard.img
會發現都是 0 組成的空檔案。
二、連接到 /dev/loop0 (Root 權限)
losetup /dev/loop0 sdcard.img
三、磁區分割 (Root 權限)
fdisk 指令參考sudo fdisk /dev/loop0
n
p
1
[enter]
+80M
n
p
2
[enter]
[enter]
t
1
b
p
w
四、做 Offset (Root 權限)
fdisk -lu /dev/loop0查看分割,輸出如下:
所用裝置 開機 開始 結束 區塊 識別號 系統
/dev/loop0p1 2048 165887 81920 b W95 FAT32
/dev/loop0p2 165888 2097151 965632 83 Linux
losetup -o `expr 512 \* 2048` /dev/loop1 /dev/loop0
losetup -o `expr 512 \* 165888` /dev/loop2 /dev/loop0
查看連接結果,輸出如下:
losetup -a
/dev/loop0: [0804]:9701359 (/home/lin/qemu/sdcard.img)
/dev/loop1: [0005]:1218 (/dev/loop0),偏移值 1048576
/dev/loop2: [0005]:1218 (/dev/loop0),偏移值 84934656
五、格式化 (Root 權限)
先裝 filesystem toolsapt-get install dosfstools
fdisk -lu /dev/loop0查看分割,輸出如下:
所用裝置 開機 開始 結束 區塊 識別號 系統
/dev/loop0p1 2048 165887 81920 b W95 FAT32
/dev/loop0p2 165888 2097151 965632 83 Linux
開始格式化記得如入 blocks:
mkfs.vfat /dev/loop1 81920
mkfs.ext4 /dev/loop2 965632
看一下 block id ,如下:
blkid /dev/loop1/dev/loop1: SEC_TYPE="msdos" UUID="3A38-5A24" TYPE="vfat"
blkid /dev/loop2/dev/loop2: UUID="dec7a9d5-b0bb-433b-aefb-6b4eecc28aba" TYPE="ext4"
Debug 1:
如果找不到 mkfs.vfat 的指令
解決 1:
sudo apt-get install dosfstools
七、掛載 (Root 權限)
先建立要掛的目錄mkdir /sd1 /sd2
掛載
mount /dev/loop1 /sd1
mount /dev/loop2 /sd2
查看掛載
df -h
八、清除全部(Root 權限)
先卸載umount /sd1
umount /sd2
df -h
解除連接(注意由下到上)
losetup -a
losetup -d /dev/loop2
losetup -d /dev/loop1
losetup -d /dev/loop0
losetup -a
九、連接及掛載(Root 權限)
(可以8. 及 9. 反覆練習)losetup /dev/loop0 sdcard.img
losetup -o `expr 512 * 2048` /dev/loop1
losetup -o `expr 512 * 165888` /dev/loop2
losetup -a
mount /dev/loop1 /sd1
mount /dev/loop2 /sd2
df -h
十、產生檔案
1. bootloader 可參考文章:u-boot 編譯產生檔案:
MLO
u-boot
u-boot.bin
u-boot.img
2. kernel 可參考文章:編譯 ARM Linux 核心
產生檔案:
uImage
modules
modules
3. Rootfs 可以參考文章:建立 Rootfs
瘦身過後的 Rootfs 全部檔案,
還需要含有步驟 2. 所編譯出來的核心 modules 。
4. uEnv.txt 可參考文章:U-Boot 指令及建立 uEnv.txt
uEnv.txt -> 開機設定檔
十一、分割區整理
sdcard1 ->
第 1 個分割區,FAT 16/32 格式,有打開開機旗標,內含檔案:
-rwxr-xr-x 1 root root 45128 2012-10-30 22:19 MLO
-rwxr-xr-x 1 root root 1215711 2012-10-30 22:19 u-boot
-rwxr-xr-x 1 root root 294672 2012-10-30 22:19 u-boot.bin
-rwxr-xr-x 1 root root 294736 2012-10-30 22:19 u-boot.img
-rwxr-xr-x 1 root root 1 2012-10-30 23:29 uEnv.txt
-rwxr-xr-x 1 root root 2475616 2012-10-30 22:15 uImage
sdcard2 ->
第 2 個分割區,ext4 格式,內含 rootfs 一些能正常開機執行的檔案,
還包含我們做好的核心 modules。
十二、測試 sdcard.img
qemu-system-arm -M beagle -m 512 -nographic -sd sdcard.imgReference:
http://pominglee.blogspot.tw/2012/10/sd-card.html
2014年10月22日 星期三
安裝 QEMU Linaro 完整版
1. 修改鏡像站
先準備 Debian backports 鏡像站,後面安裝工具會需要:sudo vi /etc/apt/sources.list
加入下面這行:
deb http://ftp.tw.debian.org/debian wheezy-backports main
下一步請更新套件:
sudo apt-get update && apt-get upgrade
2. 下載 QEMU-Linaro
至 qemu-linaro 官方下載其檔案:官方位置: https://launchpad.net/qemu-linaro
載點: qemu-linaro-1.7.0-2014.01.tar.gz
下載完後解壓縮,並進去 ./configure
tar xfva qemu-linaro-1.7.0-2014.01.tar.gz
cd qemu-linaro-1.7.0-2014.01/
./configure
可能遇到以下 ERROR:
問題1:
ERROR: pixman not present. Your options:解決1:
(1) Preferred: Install the pixman devel package (any recent
distro should have packages as Xorg needs pixman too).
(2) Fetch the pixman submodule, using:
git submodule update --init pixman
sudo apt-get install libseccomp-dev
問題2:
ERROR: DTC not present. Your options:解決2:
(1) Preferred: Install the DTC devel package
(2) Fetch the DTC submodule, using:
git submodule update --init dtc
sudo apt-get install -y libfdt-dev
成功後可以看到 ./configure 的內容後,
但是大多的功能都是 support no,
接下來要讓它們變 yes ,進行完整化。
3. 要安裝以下套件
libnss3-devlibudev-dev
libpng12-dev
libghc6-zlib-dev
libogg-dev
libglobus-openssl-dev
libxrandr-dev
libxfixes-dev
libjpeg8-dev
libsasl2-dev
libiscsi-dev
librbd-dev
xfslibs-dev
libbrlapi-dev
libbluetooth-dev
libxen-dev
libvte-dev
libseccomp-dev
python-pyparsing
sudo apt-get install libnss3-dev libudev-dev libpng12-dev libghc6-zlib-dev libogg-dev libglobus-openssl-dev libxrandr-dev libxfixes-dev libjpeg8-dev libsasl2-dev libiscsi-dev librbd-dev xfslibs-dev libbrlapi-dev libbluetooth-dev libxen-dev libvte-dev libseccomp-dev python-pyparsing
接下來處理幾個比較麻煩的套件,
可以查看 qemu-linaro-1.7.0-2014.01/ 目錄下的 configure 內容,
vi configure
輸入關鍵字(例如 spice),可以找到所取少的套件。
spice support 要讓這個功能需要裝有
--atleast-version=0.12.0 spice-server (至少 0.12.0 版以上)
--atleast-version=0.12.3 spice-protocol (至少 0.12.3 版以上)
我們要到 spice 官方,下載,安裝如下面步驟:
4. 安裝 spice-0.12.5
(如有遇到問題,解決方法在下面)下載 spice-0.12.5.tar.bz2
tar xfva spice-0.12.5.tar.bz2
cd spice-0.12.5/
這邊的設定要多加 smartcard 開啟
./configure --enable-smartcard
會看到輸出:
Spice 0.12.5
==============
prefix: /usr/local
c compiler: gcc -std=gnu99
c++ compiler: g++
python: /usr/bin/python2
Build Spice client: no
Smartcard: yes
SASL support: yes
Automated tests: no
Manual: no
Now type 'make' to build spice
make -j ${core number}
sudo make install裝 spice 問題一 (如果沒有就跳過此步驟)
Alternatively, you may set the environment variables CELT051_CFLAGS
and CELT051_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
因為 spice-0.12.5 只接受 CELT 051 版。
解決:
下載 celt-0.5.1.3.tar.gz
tar xfva celt-0.5.1.3.tar.gz
cd celt-0.5.1.3/
./configure
make -j ${core number}
sudo make install
裝 spice 問題二 (如果沒有就跳過此步驟)
checking for pyparsing python module... not found解決:
configure: error: pyparsing python module is required to compile this package
sudo apt-get install python-pyparsing
裝 spice 問題三 (如果沒有就跳過此步驟)
checking sasl/sasl.h usability... no解決:
checking sasl/sasl.h presence... no
checking for sasl/sasl.h... no
checking for sasl_client_init in -lsasl2... no
checking for sasl_client_init in -lsasl... no
configure: error: Missing required Cyrus SASL development package
sudo apt-get install libsasl2-dev
裝 spice 問題四 (如果沒有就跳過此步驟)
checking for SMARTCARD... no解決:
configure: error: Package requirements (libcacard >= 0.1.2) were not met:
No package 'libcacard' found
Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix.
Alternatively, you may set the environment variables SMARTCARD_CFLAGS
and SMARTCARD_LIBS to avoid the need to call pkg-config.
下載 libcacard-0.1.2.tar.bz2
tar xfva libcacard-0.1.2.tar.bz2
cd libcacard-0.1.2/
./configure
make -j ${core number}
sudo make install
承上面問題,裝 libcacard 問題 (如果沒有就跳過此步驟)
checking for NSS... no解決:
configure: error: Package requirements (nss) were not met:
No package 'nss' found
Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix.
Alternatively, you may set the environment variables NSS_CFLAGS
and NSS_LIBS to avoid the need to call pkg-config.
sudo apt-get install libnss3-dev
5. 安裝 spice-protocol-0.12.7
下載 spice-protocol-0.12.7.tar.bz2tar xfva spice-protocol-0.12.7.tar.bz2
cd spice-protocol-0.12.7/
./configure
make -j ${core number}
sudo make install
6. 安裝 libusb-1.0.1
下載 libusb-1.0.19/libusb-1.0.19.tar.bz2tar xfva libusb-1.0.19.tar.bz2
cd libusb-1.0.19/
./configure
make -j ${core number}
sudo make install
7. 安裝 usbredir-0.7
下載 usbredir-0.7.tar.bz2tar xfva usbredir-0.7.tar.bz2
cd usbredir-0.7/
./configure
make -j ${core number}
sudo make install
8. 再回到(步驟 2.) 裝 qemu-linaro
cd qemu-linaro-1.7.0-2014.01/內容如下:
./configure
tcg debug enabled no接著編譯:
gprof enabled no
sparse enabled no
strip binaries yes
profiler no
static build no
-Werror enabled no
pixman system
SDL support yes
GTK support yes
curses support yes
curl support yes
mingw32 support no
Audio drivers oss
Block whitelist (rw)
Block whitelist (ro)
VirtFS support yes
VNC support yes
VNC TLS support yes
VNC SASL support yes
VNC JPEG support yes
VNC PNG support yes
VNC WS support yes
xen support yes
brlapi support yes
bluez support yes
Documentation yes
GUEST_BASE yes
PIE yes
vde support yes
Linux AIO support yes
ATTR/XATTR support yes
Install blobs yes
KVM support yes
RDMA support yes
TCG interpreter no
fdt support yes
preadv support yes
fdatasync yes
madvise yes
posix_madvise yes
sigev_thread_id yes
uuid support yes
libcap-ng support yes
vhost-net support yes
vhost-scsi support yes
Trace backend nop
Trace output file trace-
spice support yes (0.12.7/0.12.5)
rbd support yes
xfsctl support yes
nss used yes
libusb yes
usb net redir yes
GLX support yes
libiscsi support yes
build guest agent yes
QGA VSS support no
seccomp support yes
coroutine backend ucontext
coroutine pool yes
GlusterFS support no
virtio-blk-data-plane yes
gcov gcov
gcov enabled no
TPM support no
libssh2 support yes
TPM passthrough no
QOM debugging yes
vhdx yes
make -j ${core number}安裝:sudo make install
9. 重整 qemu 檔案路徑
安裝完後可能出現檔案路徑問題,請執行:ldconfig
10. 查看版本
qemu-system-arm -version
QEMU emulator version 1.7.0 (qemu-linaro 2014.01), Copyright (c) 2003-2008 Fabrice Bellard
qemu-system-arm -M ?
Supported machines are:
none empty machine
beagle Beagle board (OMAP3530)
beaglexm Beagle board XM (OMAP3630)
collie Collie PDA (SA-1110)
nuri Samsung NURI board (Exynos4210)
smdkc210 Samsung SMDKC210 board (Exynos4210)
connex Gumstix Connex (PXA255)
verdex Gumstix Verdex (PXA270)
highbank Calxeda Highbank (ECX-1000)
midway Calxeda Midway (ECX-2000)
integratorcp ARM Integrator/CP (ARM926EJ-S) (default)
kzm ARM KZM Emulation Baseboard (ARM1136)
mainstone Mainstone II (PXA27x)
musicpal Marvell 88w8618 / MusicPal (ARM926EJ-S)
n800 Nokia N800 tablet aka. RX-34 (OMAP2420)
n810 Nokia N810 tablet aka. RX-44 (OMAP2420)
n900 Nokia N900 (OMAP3)
sx1 Siemens SX1 (OMAP310) V2
sx1-v1 Siemens SX1 (OMAP310) V1
overo Gumstix Overo board (OMAP3530)
cheetah Palm Tungsten|E aka. Cheetah PDA (OMAP310)
realview-eb ARM RealView Emulation Baseboard (ARM926EJ-S)
realview-eb-mpcore ARM RealView Emulation Baseboard (ARM11MPCore)
realview-pb-a8 ARM RealView Platform Baseboard for Cortex-A8
realview-pbx-a9 ARM RealView Platform Baseboard Explore for Cortex-A9
akita Akita PDA (PXA270)
spitz Spitz PDA (PXA270)
borzoi Borzoi PDA (PXA270)
terrier Terrier PDA (PXA270)
lm3s811evb Stellaris LM3S811EVB
lm3s6965evb Stellaris LM3S6965EVB
tosa Tosa PDA (PXA255)
versatilepb ARM Versatile/PB (ARM926EJ-S)
versatileab ARM Versatile/AB (ARM926EJ-S)
vexpress-a9 ARM Versatile Express for Cortex-A9
vexpress-a15 ARM Versatile Express for Cortex-A15
xilinx-zynq-a9 Xilinx Zynq Platform Baseboard for Cortex-A9
z2 Zipit Z2 (PXA27x)
其他 QEMU Bug 排除,參考文章:Bridge 建立橋接網路(QEMU Debug) 下方內容。
Reference:
http://pominglee.blogspot.tw/2014/06/linaro-qemu.html
2014年10月13日 星期一
用 QEMU 來開機 arm.img
1. 查看 .img
查看一下我們做好的 image 檔案:file arm.img
hexdump arm.img
再做一個空的 arm_test.img 測試 & 比較:
dd if=/dev/zero of=arm_test.img bs=1G count=2
file arm_test.img
hexdump arm_test.img
然後會發現, arm.img 裡頭有很多東西,但 arm_test.img 就是一個空的data。
2. 練習運算指令:expr
加法: expr 5 + 2
減法: expr 5 - 2
乘法: expr 5 \* 2
除法: expr 5 / 2
只有乘法比較特別,因為 * 是萬用特殊字元。
3. 對 image 檔案做連接,指令:losetup
到 ~/qemu_image 目錄下,需要 superUsercd ~/qemu_image
su
查看連接狀況:
losetup -a
將 /dev/loop0 連接 arm.img:
losetup /dev/loop0 arm.img
4. 做磁區偏移(一樣 ROOT 下)
fdisk -lu /dev/loop0所用裝置 開機 開始 結束 區塊 識別號 系統
/dev/loop0p1 2048 3913727 1955840 83 Linux
/dev/loop0p2 3915774 4192255 138241 5 延伸
/dev/loop0p5 3915776 4192255 138240 82 Linux 交換區/ Solaris
其中 /dev/loop0p1 的開始(0ffset)為 2048,我們需要修正 512 * 2048 個 sector:
losetup -o `expr 512 \* 2048` /dev/loop1 /dev/loop0
5. 核心檔案擷取
掛載:sudo mount /dev/loop1 /mnt
複製核心檔案(這邊要一般 User)
cd /mnt/boot
cp vmlinuz-3.2.0-4-versatile ~/qemu_image
cp initrd.img-3.2.0-4-versatile ~/qemu_image
6. 用 QEMU 來做 arm.img 開機
我們先做一個 Shell Script: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" &
執行 runarm.sh
sh runarm.sh
7. 進入 QEMU - arm.img
開機以後,在QEMU中查看一下核心,證明我們是用 ARM 核心開機cat /proc/cpuinfo
接下來套件更新
sudo apt-get update && apt-get upgrade -y
安裝 X-Window 套件
sudo apt-get install icewm xorg
清除套件,省空間
apt-get clean
進入圖形介面
startx
裝瀏灠器及 http 伺服器測試
sudo apt-get install iceweasel apache2網址列: localhost
iceweasel &
可以看到 網頁 work 中...
關機
sudo halt
Reference:
http://pominglee.blogspot.tw/2013/11/qemu-arm.html
2014年10月8日 星期三
建立一個 arm.img
1. 建立目錄
(為了方便整理 QEMU Image 。)cd ~
mkdir qemu_image
mkdir -p qemu_image/install
cd qemu_image/
2. 建立空的 qemu-img 檔:
qemu-img create arm.img 2G
接著可以用下面指令來查看檔案大小:
ls -l
du -sh arm.img
其中會發現, ls 所看到的遠比 du -sh 還來得大,
這是因為 qemu-img 會建立出一個「用多少就長多大」的 img,
為了節省儲存空間,但是最大可用值不會超過當初設定的 2GB 。
3. 下載 .iso
至台灣高品質學術研究網路(TWAREN)下載最新版 Debian armel 版之 .iso 檔。網址路徑:
http://ftp.twaren.net/Linux/Debian/debian-cd/7.6.0/armel/iso-cd/
4. 下載 ARM 開機檔。
至 Debian 官方下載兩個 ARM 版開機所需檔案: initrd.gz 、 vmlinuz-3.2.0-4-versatile 。
官方網址路徑:ftp://ftp.debian.org/debian/dists/wheezy/main/installer-armel/current/images/versatile/netboot/
載點:
initrd.gz
vmlinuz-3.2.0-4-versatile
把這兩個檔案下載至 ~/qemu_image/install 下。
5. 啟動 QEMU
於 ~/qemu_image 目錄下,寫一個 Shell Script 來快速執行: QEMU 安裝 arm.img 。
vi buildarm.sh
qemu-system-arm -M versatilepb -m 512 \
-kernel ./install/vmlinuz-3.2.0-4-versatile \
-initrd ./install/initrd.gz \
-hda arm.img \
-append "root=/dev/sda1"
再加入可執行權限:
chmod u+x ~/qemu_image/buildarm.sh
開始執行安裝:
sh ~/qemu_image/buildarm.sh
6. 最後,照安裝步驟來進行安裝。
7. 備份
複製 arm.img 為 arm_OK.img 做為備份,即可開始搞爛 arm.img !~/qemu_image $ cp arm.img arm_OK.img
Reference:
2014年10月7日 星期二
安裝 QEMU 虛擬機
目標是建置一個 ARM Image 的虛擬機環境。
zlib1g-dev
pkg-config
libsdl1.2-dev
libcurl4-openssl-dev
libsasl2-dev
libaio-dev
libvde-dev
libvdeplug2-dev
uuid-dev
libcap-ng-dev
如上所述,要看到:
SDL support yes
KVM support yes
核心數可以用 cat /proc/cpuinfo 來查看 siblings 核心處理序數量。
1. 先安裝 QEMU 虛擬環境套件( 基礎版先讓 KVM、SDK support 起來):
libtoolzlib1g-dev
pkg-config
libsdl1.2-dev
libcurl4-openssl-dev
libsasl2-dev
libaio-dev
libvde-dev
libvdeplug2-dev
uuid-dev
libcap-ng-dev
sudo apt-get update && apt-get install -y libtool zlib1g-dev pkg-config libsdl1.2-dev libcurl4-openssl-dev libsasl2-dev libaio-dev libvde-dev libvdeplug2-dev uuid-dev libcap-ng-dev
2. 至官網下載 QEMU 最新版本 (本例為 QEMU version 2.1.2):
http://wiki.qemu.org/Main_Page3. 解壓縮檔案:
tar xfva qemu-2.1.2.tar.bz2
4. 到 qemu-2.1.2.tar.bz2 解壓縮的目錄下,進行參數設定:
./configure
如上所述,要看到:
SDL support yes
KVM support yes
5. 接著進行編譯:
make -j [核心數]
核心數可以用 cat /proc/cpuinfo 來查看 siblings 核心處理序數量。
6. 開始安裝 QEMU :
sudo make install
安裝完後,其目錄會自動建置在 /usr/local/bin 底下。
7. 查看 QEMU 版本:
qemu-system-arm -version
8. 查看所支援的硬體平台:
qemu-system-arm -M ?
安裝 Nvidia 顯卡驅動
1. 查看自己的顯卡型號 (本例如下型號):
lspci
01:00.0 VGA compatible controller: NVIDIA Corporation G94 [GeForce 9600 GT] (rev a1)
2. Nvidia 官方載點:
http://www.nvidia.com.tw/Download/index.aspx?lang=tw下載以 Nvidia Geforce 9600 GT 為例,如下圖:
搜尋後,下載到一個「NVIDIA-Linux-x86_64-340.32.run」。
3. 開始安裝(頁面最下方有 Debug 說明):
sh NVIDIA-Linux-x86_64-340.32.run
4. 在 X-Windows 下,以終端機開啟 Nvidia 設定視窗,指令如下:
nivida-setting
可以查看到各項顯卡設定,
例如我有兩台螢幕,在裡面設定:
左螢幕:
輸出結果:
5. 以 Blender 軟體為例,來驅動 3D 硬體加速:
至軟體 Blender > file > system > USR...> compute device > CUDA
Debug 1.
過程需要關 X-Windows ,若 X 無法關閉(以gnome為例),則需要移除下列三個套件:
gnome
gnome-core
gdm3
apt-get remove gnome gnome-core gdm3
Debug 2.
過程中發現 nouveau 驅動模組無法關閉( rmmod )的話,則有可能是在核心編譯過程中,選到 <*> 或 <M> 所致:
先試試停用 Nouveau 驅動模組,
(特別注意下面是兩個大於符號):
echo "blacklist nouveau" >> /etc/modprobe.d/fbdev-blacklist.conf
reboot
如果還是不行,請重新做核心編譯:
> Device Drivers >
Graphics support >
< > Nouveau (nVidia) cards
解決方法為,重編核心,把上面的 <*> 或 <#> 改為 < > ,
把 kernel 內建的 nvidia 驅動關閉,我們另裝官方提供的驅動程式。
Linux Kernel 編譯及更新
1. 安裝編譯工具:
#gcc-4.4
gcc
#g++-4.4
g++
#cpp-4.4
cpp
m4
make
nasm
bison
flex
autoconf
automake
autotools-dev
#compile kernel
kernel-package
libncurses5-dev
# Fetch Source Code
git
subversion
將上述工具、套件 copy 起來,
並建立一個編譯工具安裝列表 PKG_PROG 文字檔 paste 上去,
可以更方便紀錄及管理;接著下 cmd 安裝:
sudo apt-get update && apt-get install -y `grep -v ^# PKG_PROG`
grep 是擷取文字。
-v 是 inverter 反向。
^# 相當等於 \# ,因為 # 為特殊字元,要用反斜線或^來使用。
2. 至 https://www.kernel.org/ ,下載最新的核心版本,
建議使用 longterm (長期支援版),下載至 /usr/src 目錄下,
下面以linux-3.14.20.tar.xz 為例。
3. 查看電腦驅動模組:
lspci -v
lspci -k
lsmod
cat /proc/cpuinfo
基本的查看的項目:Ethernet、VGA、Audino…等,以我的為例:
02:00.0 Ethernet controller: Atheros Communications Inc. AR8121/AR8113/AR8114 Gigabit or Fast Ethernet (rev b0)
Subsystem: ASUSTeK Computer Inc. Device 8226
Flags: bus master, fast devsel, latency 0, IRQ 17
Memory at fe9c0000 (64-bit, non-prefetchable) [size=256K]
I/O ports at bc00 [size=128]
Capabilities:
Kernel driver in use: ATL1E
01:00.0 VGA compatible controller: NVIDIA Corporation G94 [GeForce 9600 GT] (rev a1) (prog-if 00 [VGA controller])
Subsystem: ASUSTeK Computer Inc. Device 8304
Flags: bus master, fast devsel, latency 0, IRQ 46
Memory at fd000000 (32-bit, non-prefetchable) [size=16M]
Memory at c0000000 (64-bit, prefetchable) [size=512M]
Memory at fa000000 (64-bit, non-prefetchable) [size=32M]
I/O ports at ac00 [size=128]
[virtual] Expansion ROM at fe880000 [disabled] [size=512K]
Capabilities:
Kernel driver in use: nvidia
06:00.0 Multimedia audio controller: VIA Technologies Inc. VT1720/24 [Envy24PT/HT] PCI Multi-Channel Audio Controller (rev 01)
Subsystem: Device 160b:0010
Flags: bus master, medium devsel, latency 64, IRQ 16
I/O ports at ec00 [size=32]
I/O ports at e880 [size=128]
Capabilities:
Kernel driver in use: snd_ice1724
4. 先解壓縮,並做一個 sublink 到 linux,並進去做核心參數設定。
tar xfva linux-3.14.20.tar.xz
ln -s /usr/src/linux-3.14.20 /usr/src/linux
cd /usr/src/linux
make menuconfig
下面開始做最基本的核心選單設定,可以用 "/" 來做搜尋,輸入上面找到的 Kernel driver,可以更快的開啟模組:
設定編譯的壓縮格式,XZ 為壓縮率高及失真率低優點:
> General setup > Kernel compression mode > XZ
設定自己核心所屬的家族 (本例是 Core 2/newer Xeon):
> Processor type and features > Processor family > (Core 2/newer Xeon)
網路卡開啟自己的型號(本例是 Atheros 要開啟 ):
> Device Drivers > Network device support > Ethernet driver support > Atheros 全開
顯卡驅動( 本例是 Nvidia ),這邊注意不能選<*> ,後面要裝官方驅動會有問題。
> Device Drivers > Graphics support > <M>Nouveau (nVidia) cards
音效卡驅動(本例是 Onkyo SE-90PCI 音效卡,晶片為 VT1720/24 [Envy24PT/HT]):
-> Device Drivers > Sound card support (SOUND [=m]) > Advanced Linux Sound Architecture (SND [=m]) > PCI sound devices (SND_PCI [=y]) >ICE/VT1724/1720 (Envy24HT/PT)
選好所需要的核心模組後,及可按 Exit 並儲存離開,回到 /usr/src/linux 目錄下。
5. 開始編譯!直接指令來 Run :
time make-kpkg --initrd --revision=[版本名稱] kernel_image -j [核心數]
版本名稱可以自訂,一般設定習慣為 1.0.1.xxx 這種格式,數字及英文代號皆可自訂。
核心數可以用 cat /proc/cpuinfo 來查看 siblings 核心處理序數量。
6. 編譯完成,來進行最後核心 .deb 檔的安裝(本例核心版本名稱為 1.0.1.lpm ):
sudo dpkg -i linux-image-3.14.20_1.0.1.lpm_amd64.deb
7. 安裝完成,重開機~
sudo shutdown -r now 或
reboot
8. 查看核心版本:
uname -a
訂閱:
文章 (Atom)




