2020年3月26日 星期四

FT-2000 +64 ARM64 Cross-Compiler env setup


------------------------------------------------------------
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
 

沒有留言:

張貼留言