Custom Kernel

    內容表格
    沒有標頭

    版本為 17:18, 28 Jul 2026

    到這個版本。

    返回到 版本存檔.

    查閱目前版本

    本文特別感謝數位天堂Hippo大大
    參考
    http://digiland.tw/viewtopic.php?id=1942
    http://buffalo.nas-central.org/index...M9_Kernel_Port
    http://computingplugs.com/index.php/..._custom_kernel
    http://www.nslu2-linux.org/wiki/Optware/PlugComputers
    http://plugcomputer.org/plugwiki/ind...nel_and_U-Boot

    環境 ubuntu
    1.Toolchain (Compiler)
    2.uboot-mkimage
    3.devio apt-get install devio

    獲得Sourcescode


    以linux-3.1.10 舉例.

     

    $ wget ftp://ftp.isu.edu.tw/Linux/kernel/linux-3.1.10.tar.xz 
    $ tar -xJf linux-3.1.10.tar.xz -C Source 
    $ sudo ln -s /home/使用者/Source/linux-3.1.10 /usr/src/linux-3.1.10
    $ apt-get install uboot-mkimage
    



    1. mkimage.
    要產生uImage, 得先有mkimage程式. 透過自己的Linux OS套件管理程式, 搜尋u-boot, uboot, mkimage等關鍵字, 查看是否有現成的套件. 如果沒有也沒關係, 自己編譯.
    先營建編譯環境(x86, amd64), 下載u-boot-2011.12, 解壓縮取得原始碼. 先參閱README.
    因為目的是產生mkimage, 就取sheevaplug編譯好了.

    #!/bin/sh 
    make distclean
    make sheevaplug_config
    make all


    在tools目錄下就產生mkimage. 使用file指令檢查一下, 複製到$PATH的路徑目錄下.

    2. 交叉編譯器.
    同樣, 搜尋是否有現成的arm交叉編譯器套件. 如果沒有, 到CodeSourcery下載現成的. 如果注意console輸出訊息, 韌體核心使用CodeSourcery ARM 2005q3-2編譯.
    因NAS-34是Marvell Orion CPU, 由文件或維基百科等, 查ARM核心架構等. 再看交叉編譯器是否支援.

    $ arm-none-linux-gnueabi-gcc --target-help ... Known ARM CPUs (for use with the -mcpu= and -mtune= options): cortex-m0, cortex-m1, cortex-m3, cortex-m4, cortex-r5, cortex-r4f, cortex-r4, cortex-a15, cortex-a9, cortex-a8, cortex-a5, arm1156t2f-s, arm1156t2-s, mpcore, mpcorenovfp, arm1176jzf-s, arm1176jz-s, arm1136jf-s, arm1136j-s, arm1026ej-s, arm926ej-s, fa726te, fmp626, fa626te, fa606te, iwmmxt2, iwmmxt, xscale, arm1022e, arm1020e, arm10e, arm968e-s, arm966e-s, arm946e-s, arm9e, arm1020t, arm10tdmi, ep9312, arm940t, arm922t, arm920t, arm920, arm9tdmi, arm9, arm740t, arm720t, arm710t, arm7tdmi-s, arm7tdmi, fa626, fa526, strongarm1110, strongarm1100, strongarm110, strongarm, arm810, arm8, arm7dmi, arm7dm, arm7m, arm7500fe, arm7500, arm7100, arm710c, arm720, arm710, arm700i, arm700, arm70, arm7di, arm7d, arm7, arm620, arm610, arm600, arm60, arm6, arm3, arm250, arm2 Known ARM architectures (for use with the -march= option): iwmmxt2, iwmmxt, ep9312, armv7e-m, armv7-m, armv7-r, armv7-a, armv7, armv6s-m, armv6-m, armv6t2, armv6zk, armv6z, armv6k, armv6j, armv6, armv5te, armv5e, armv5t, armv5, armv4t, armv4, armv3m, armv3, armv2a, armv2 ...

     

    編譯器安裝

    首先先到https://sourcery.mentor.com/GNUToolchain/release1802?lite=arm 下載

    本次使用

       

     IA32 GNU/Linux Installer

    wget https://sourcery.mentor.com/GNUToolchain/package8736/public/arm-none-eabi/arm-2011.03-42-arm-none-eabi.bin
    tar -xjf arm-2011.03-42-arm-none-eabi.bin
    
    chmod +x arm-2011.03-42-arm-none-eabi.bin
    接下來再執行以下指令,之後選否
    sudo dpkg-reconfigure dash
    
    .\arm-2011.03-42-arm-none-eabi.bin

    就會執行安裝了

    sudo vi /etc/profile
    在最后增加:
    PATH=$HOME/CodeSourcery/Sourcery_G++_Lite/bin:$PATH

    保存退出。
    增加路径为安装路径。
    测试环境变量是否生效,重新登录后:
    arm-none-linux-gnueabi-gcc -v
    出现版本信息,则OK

    ↑這邊應該有錯誤,無法正常下達指令

    小弟我的解決方法:自行去目錄

    $home/CodeSourcery/Sourcery_G++_Lite/bin
    

    就可以下達相關的指令了,環境變數正在研究中

    出自於:http://hi.baidu.com/embob/blog/item/...6b7fd485c.html

    3. linux-3.2.11
    學術網路上都有原始碼. 如果使用Marvell釋出的原始碼也行, 但要搞定machine ID.
    交叉編譯環境+Linux原始碼搞定後, 別急, 先檢查一下.

    $ make ARCH=arm help ... orion5x_defconfig - Build for orion5x ...


    好, 有預設的config, 動手.

    #!/bin/sh Toolchain=arm-2005q3-2 export PATH=$HOME/bin/$Toolchain/bin:$PATH export CROSS_COMPILE=arm-none-linux-gnueabi- export ARCH=arm export CFLAGS="-mtune=arm926ej-s -march=armv5te" export INSTALL_MOD_PATH=$HOME/NAS-34 cd /usr/src/linux-3.2.11 make mrproper make orion5x_defconfig make menuconfig make -j2 uImage && \ make -j2 modules && \ make modules_install


    在menuconfig選單下, 有幾點要注意:
    1. System Type, Orion Implementations:
    Marvell Orion-NAS Reference Design
    只選一個就好, 選多, 仍會卡在machine ID.
    2. Device Drivers, Memory Technology Device (MTD) support:
    如果不想動原廠韌體, 取消, 不驅動MTD.
    3. 因目前測試, linux-3x無法驅動內建網卡, 所以要由USB網卡補助.
    4. 其他選項, 參考Help, 我無法細述. 重點在驅動NAS-34硬體, 精簡核心, 其他需要的硬體驅動, 編譯為核心模組, 外掛即可.

    編譯完成後, linux-3.2.11/arch/arm/boot/目錄下, 就有uImage了.
    上傳到Tomato TFTP server, NAS-34接上console線, 不必插硬碟, 開機, 中斷U-Boot.

    >> dhcp >> setenv bootargs 'console=ttyS0,115200 mem=128M' >> tftpboot 800000 uImage >> bootm 800000

    然後比對原廠韌體的console訊息, 查看自己編譯的核心是否有遺漏等等. 如果核心出錯, 回頭再重新編譯.

     

    自認核心都沒問題後, 準備rootfs. rootfs可放在硬碟或NFS server.

     

    參考linux-3.2.11/Documentation/內的文件, 修改U-Boot bootargs值, 再測試進入Linux OS.

     

    開 機到進入Linux OS都搞定後, 可準備將uImage複製到硬碟, 插入硬碟就進入Linux OS. 參考U-Boot網站文件, 撰寫自己的U-Boot參數, 設定開機啟動順序. 覆寫原廠U-Boot參數前, 先printenv, 將原廠U-Boot參數備份.

    下載至/boot, 並建立連結
    # ls -l /boot/uImage* lrwxrwxrwx 1 root root 29 Mar 25 2012 /boot/uImage -> uImage-2.6.32-5-orion5x.ts209 -rw-r--r-- 1 root root 1315904 Mar 25 2012 /boot/uImage-2.6.32-5-orion5x.ts209


    U-Boot參數

    >> ext2load ide 0:1 0x800000 /uImage >> ext2load ide 0:1 0xa00000 /initrd.img >> setenv bootargs 'console=ttyS0,115200 mem=128M root=/dev/sda2 rootfstype=ext3 initrd=0xa00000,0x8fffff' >> bootm 0x800000

    Powered by MindTouch Core