Ubuntu下移植內核到OK6410開發板

Ubuntu下移植內核到OK6410開發板

 環境:Win7+virsualBox+ubuntu12.04+ok6410開發板html

 

一,下載源碼:我這裏下載的版本是--linux-3.12.7

 http://www.kernel.org/

 

二,解壓內核:

tar -xvf linux-3.12.7-tar.xz

 

三,更改權限(最好賦予所有權限)

sudo chmod -R 777 linux-3.12.7/*

 

四,修改源碼(針對基於smdk6410架構的ok6410開發板)

 

1,在arch/arm/mach-s3c64xx/目錄下的mach-smdk6410.c 複製一份在當前文件下命名爲mach-ok6410.c

wu@wu-VirtualBox:/opt/linux-3.12.7/arch/arm/mach-s3c64xx$ cp smdk6410.c ok6410.c

 

2,修改當前目錄下的Kconfig文件,添加ok6410的配置

wu@wu-VirtualBox:/opt/linux-3.12.7/arch/arm/mach-s3c64xx$ gedit Kconfig 
找到:MACH_SMDK6410,複製一份smdk6410的配置信息粘貼到下面
config MACH_SMDK6410
    bool "SMDK6410"
    select CPU_S3C6410
    select HAVE_S3C2410_WATCHDOG if WATCHDOG
    select S3C64XX_SETUP_FB_24BPP
    select S3C64XX_SETUP_I2C1
    select S3C64XX_SETUP_IDE
    select S3C64XX_SETUP_KEYPAD
    select S3C64XX_SETUP_SDHCI
    select S3C64XX_SETUP_USB_PHY
    select S3C_DEV_FB
    select S3C_DEV_HSMMC
    select S3C_DEV_HSMMC1
    select S3C_DEV_I2C1
    select S3C_DEV_RTC
    select S3C_DEV_USB_HOST
    select S3C_DEV_USB_HSOTG
    select S3C_DEV_WDT
    select SAMSUNG_DEV_ADC
    select SAMSUNG_DEV_BACKLIGHT
    select SAMSUNG_DEV_IDE
    select SAMSUNG_DEV_KEYPAD
    select SAMSUNG_DEV_PWM
    select SAMSUNG_DEV_TS
    help
      Machine support for the Samsung SMDK6410

config MACH_OK6410
    bool "OK6410"
    select CPU_S3C6410
    select HAVE_S3C2410_WATCHDOG if WATCHDOG
    select S3C64XX_SETUP_FB_24BPP
    select S3C64XX_SETUP_I2C1
    select S3C64XX_SETUP_IDE
    select S3C64XX_SETUP_KEYPAD
    select S3C64XX_SETUP_SDHCI
    select S3C64XX_SETUP_USB_PHY
    select S3C_DEV_FB
    select S3C_DEV_HSMMC
    select S3C_DEV_HSMMC1
    select S3C_DEV_I2C1
    select S3C_DEV_RTC
    select S3C_DEV_USB_HOST
    select S3C_DEV_USB_HSOTG
    select S3C_DEV_WDT
    select SAMSUNG_DEV_ADC
    select SAMSUNG_DEV_BACKLIGHT
    select SAMSUNG_DEV_IDE
    select SAMSUNG_DEV_KEYPAD
    select SAMSUNG_DEV_PWM
    select SAMSUNG_DEV_TS
    help
    Machine support for the Forlinux OK6410

 

3,修改mach-ok6410.c

wu@wu-VirtualBox:/opt/linux-3.12.7/arch/arm/mach-s3c64xx$ gedit mach-ok6410.c

把文件中全部的smdk6410改爲ok6410,而後找到:MACHINE_START,修改爲下面,注意大小寫。linux

MACHINE_START(OK6410, "OK6410")

 

4,修改當前目錄下的Makefile文件:

wu@wu-VirtualBox:/opt/linux-3.12.7/arch/arm/mach-s3c64xx$ gedit Makefile

添加以下配置:ubuntu

# Machine support
obj-$(CONFIG_MACH_OK6410)        += mach-ok6410.o

 

 

5,修改機器碼ID,必須和uboot的ID一致,所修改arch/arm/tools/mach-types文件:

wu@wu-VirtualBox:/opt/linux-3.12.7/arch/arm/tools$ gedit mach-types 

找到smdk6410,修改成:(注意大小寫架構

//smdk6410        MACH_SMDK6410       SMDK6410        1626
ok6410 MACH_OK6410 OK6410 1626

 

6,修改源碼根目錄下的Makefile文件:

wu@wu-VirtualBox:/opt/linux-3.12.7$ gedit Makefile 

找到這行:工具

//ARCH        ?= $(SUBARCH)
//CROSS_COMPILE    ?= $(CONFIG_CROSS_COMPILE:"%"=%)

ARCH        ?= arm
CROSS_COMPILE    ?= arm-linux-

也能夠不修改,在運行make命令的時候加上後綴如:make ARCH=arm CROSS_COMPILE=arm-linux-this

 

7,拷貝一份和smdk6410最接近的配置文件,最爲編譯的默認配置文件

wu@wu-VirtualBox:/opt/linux-3.12.7$ cp arch/arm/configs/s3c6400_defconfig .config  

 

8,執行make menuconfig對內核進行配置

a) Kernel Features---->確保Use the ARM EABI to compile the Kernel和Allow old ABI binaries to run with this Kernel (EXPERIMENTAL) 這兩項選中。spa

b) 選擇本身剛纔的配置ok6410開發板code

c) 點擊enter輸入本身交叉編譯器的路徑,(我這裏沒有輸入,是在編譯命令後面加入了後綴,沒什麼問題)htm

d)選擇圖中藍色一行,點擊enterblog

 

 e) 選擇串口0:

 

 9,開始編譯(我這裏是添加的後綴 make uImage ARCH=arm CROSS_COMPILE=arm-linux-),若是你在剛纔源碼根目錄Makefile裏面指定了就不用加這個後綴了,比較省事。

make uImage

 

10,經過dnw或者tftp把uImage下載到開發板內存中,能夠運行成功。(飛凌提供的u-boot1.1.6網卡驅動不對,能夠用dnw下載後寫入nandflash中啓動)

其餘問題:

爲何是uImage ,uboot只支持uImage格式的內核鏡像,貌似飛凌提供的uboot也能夠啓動zImage,感興趣能夠試試,能夠查看  http://kmoving.blog.163.com/blog/static/20504919720123151533819/ 裏面的介紹。

還有一點必須使用uboot自帶的工具mkimage給zImge加頭信息,不然寫入到nandflash中沒法啓動內核,這個多是我用本身移植的uboot緣由,在這篇文章中提到--http://www.cnblogs.com/lucky-tom/p/3531487.html ,完全弄明白的朋友請給我留言哇。

相關文章
相關標籤/搜索