------------------------------------------------------------
FT-2000 +64 ARM64 Cross-Compiler env setup
------------------------------------------------------------
Desktop PC: Ram: 4G, disk: 512G
OS Image: ubuntu-16.04.6-desktop-amd64.iso
kernel source: linux-4.9.150
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/
1. Install buntu-16.04.6-desktop-amd64.iso done.
2. 修改 /etc/apt/source.list 加入下面索引
deb http://archive.kylinos.cn/kylin/KYLIN-ALL 4.0.2sp2-server-ft2000 main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security multiverse
2. 安裝下列軟件
apt-get update
apt-get install -y libncurses-dev u-boot-tools libssl-dev flex bison build-essential bc libncurses5-dev
apt-get install libncurses-dev
apt-get install u-boot-tools
apt-get install libssl-dev
apt-get install flex
apt-get install bison
apt-get install gcc-aarch64-linux-gnu //在arm64系統不用裝
apt-get install build-essential
apt-get install bc
apt-get install libncurses5-dev
3. 修正 ~/.bashrc 加入下面
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
保存退出後,執行 source ~/.bashrc 使其生效。
使用命令 aarch64-linux-gnu-gcc –v 可以看到gcc 版本號為 gcc version 5.4.0 20160609;
至此,飛騰處理器交叉編譯環境搭建完畢。
安裝重編核心所需要的工具
(1) gcc
(2) make
(3) build-essential (包含g++和linux-kernel-headers)
# sudo apt-get install gcc
# sudo apt-get install make
# sudo apt-get install build-essential
下載Linux Kernel
# sudo apt-get install linux-source-2.6.15
# cd /usr/src/
# sudo tar jxf linux-source-2.6.15.tar.bz
# cd linux-source-2.6.15
用make menuconfig設定核心參數需先安裝ncurses
# sudo apt-get install libcdk-dev
設定核心參數
# sudo make menuconfig
重編與安裝核心
# sudo make
# sudo make modules
# sudo make modules_install
# sudo make install
要使用mkinitrd需先安裝initrd-tools
# sudo apt-get install initrd-tools
使用mkinitrd產生初始化檔案系統所需的鏡像檔initrd.img
(kernel版本名稱可以去/lib/modules看目錄名稱得知)
# sudo mkinitrd -o /boot/initrd.img-2.6.15.7-ubuntu1 2.6.15.7-ubuntu1
編輯/boot/grub/menu.list
# sudo vim /boot/grub/menu.list
參考原來的設定新加入以下內容
title Ubuntu, kernel 2.6.15.7-ubuntu1
root (hd0,0)
kernel /boot/vmlinuz-2.6.15.7-ubuntu1 root=/dev/sda1 ro quiet splash
initrd /boot/initrd.img-2.6.15.7-ubuntu1
savedefault
boot
編輯好後重新開機
# sudo reboot
在開機倒數畫面按ESC進入開機管理員,選擇新的Kernel開機
*** root@Kylin:/home/accusys/linux-4.9.214# apt-cache search make-kpkg
kernel-package - utility for building Linux kernel related Debian packages
apt-get install kernel-package
***
==================================
Debian / Ubuntu Linux 核心編譯
==================================
Debian sid / Ubuntu xenial
編譯Linux核心安裝所需的套件
$ sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils kernel-package libssl-dev
下載Linux核心原始碼
$ wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.5.tar.xz
$ tar xvf linux-4.5.tar.xz
設定Linux核心
$ cd linux-4.5
### 清除先前編譯的暫存檔案(新解開的壓縮檔可跳過此步驟)
$ sudo make mrproper
### 載入系統核心設定
$ cp /boot/config-$(uname -r) .config
修改核心功能與驅動程式設定項目
$ make menuconfig
編譯Linux核心並建立DEB套件包
$ make-kpkg clean
$ sudo fakeroot make-kpkg --initrd kernel_image kernel_headers
或
$ sudo fakeroot make-kpkg --initrd --revision=1.0 --append-to-version -20190726.kylin.server-generic kernel_image kernel_headers
安裝核心
$ sudo dpkg -i linux-image-*.deb
$ sudo dpkg -i linux-headers-*.deb
1、--initrd選項會讓make-kpkg自動幫我們生成initramfs;
2、--revision會給生成的deb檔案加上一個版本資訊。這個引數只是影響到檔名,如果不指定,預設會是“10.00.Custom”;
3、--append-to-version也是一種版本資訊,它不僅出現在deb安裝包的檔名裡,也會影響到kernel的名稱,比如本例中,核心更新完成之後,用“uname -r”察看會得到“2.6.36-20110107”;
***這也不是一天兩天了,常常會對 Linux 的某些 Driver 做些 Patches,或對某些 Module 做修改,
但每次要 compile 出那幾個 ko 檔時就很頭痛,既然只是修改特定的 module ,又不用重新做出新的 kernel image,
為何每次都要將整個 kernel 重新 compile 呢?其實有方法可以只編譯特定的 kernel module 以並免不必要的時間浪費。
切換到目標 module 的目錄下,然後執行:
make script
make prepare
make -C /usr/src/linux SUBDIRS=$PWD modules
※粗體字部份改成 kernel source 的位置即可。
Linux Linux Kernel
留言
Chen, Ping-Hsun (penk)2008年9月11日 下午11:28
在 Ubuntu 上我是習慣 make M=/your/path/to/module/directory -C /lib/module/$(uname -r)/build
***Update the initramfs of the newest kernel:
update-initramfs -u
***Create the initramfs for a specific kernel:
update-initramfs -c -k 2.6.18-1-686
沒有留言:
張貼留言