S3C6410嵌入式應用平臺構建(四)——linux-3.14.4移植到OK6410-(初步啓動)

此次,仍是把基本的基於我目前最新的Linux源碼進行移植到OK6410吧,同時也寫下我移植過程當中遇到的問題及解決方法,不過有些方法是借鑑網上的,有些是本身加的,會有一些小bug。node

    1、基本工做linux

    1. 源碼下載    https://www.kernel.org/   ,最好是下載stable版本,不然會有小bug。(我如今調試的是stable版本, linux-3.14.4)git

    2. 拷到本身的文件夾下解壓,我下的是.xz後綴的,這樣文件比較小,只是解壓時多一個步驟。shell

      $ xz –d linux-3.14.4.tar.xzapp

      $ tar xvf linux-3.14.4.taride

   3. 解壓完後,進入解壓後的目錄svn

 

   2、源碼修改工具

    1. 修改根目錄下的Makefile,針對修改arch和cross_compile,以下:oop

   2. 添加相關型號mach文件佈局

    目前最新內核已經支持好幾種開發板,咱們先從最基本的6410開始,選擇mini6410,基於mini6410來修改配置,所以,進入arch/arm/mach-s3c64xx目錄,拷貝mach-mini6410.c,重命名爲mach-ok6410.c,下面須要對該文件進行一些修改:

    2.1 將代碼中替換爲6410, 以下: mini6410->ok6410;  MINI6410->OK6410

    2.2 而後修改nand分區信息,修改static struct mtd_partition ok6410_nand_part[],這個修改須要結合你以前移植Uboot及你本身定義的分區佈局。個人是這樣的。


   2.3 既然咱們添加了一個文件,依據linux添加文件的規則,咱們還修改相對應目錄下Makefile和Kconfig

   修改kconfig,參照MINI6410的配置,添加OK6410,以下:


      修改Makefile,加入ok6410

3. 修改arch/arm/tools/mach-types文件,加入OK6410的mach-type,這個必須和U-BOOT中的MACH-TYPE一致,這裏選用smdk6410的mach-type:1626

4. Menuconfig配置

    回到主目錄下,咱們選用針對6400的默認配置,在此基礎上進行配置。複製config下的s3c6400_defconfig到主目錄並重命名爲.config文件

  $  cp arch/arm/configs/s3c6400_defconfig  ./.config
  $  make menuconfig

  進入後作以下配置:(這裏說一下:此狀況下刪除你的輸入,須要按delete+shift,按backspace是沒用的)

  4.1 選擇General Setup,打開Cross_compiler tool perfix,輸入arm-linux-

image
4.4 選擇System Type, 取消其餘6410,只選擇OK6410

image 

4.3 選擇Kernel Features , 選擇如下兩項

image

4.4 爲了調試方便,咱們順便把nand flash的debug也打開,並選擇硬件ECC。

      Device Drivers—>Memory Technology Device(MTD) support—>NAND Device Support—>

image

      完成以上配置後,保存退出!

      在主目錄下執行,make uImage( 前提是你已經把Uboot tools/下的mkimage工具拷貝到/bin目錄下)

     最後在編譯完成後,輸出信息以下:

image

    經過tftp下載到板子上,運行後界面以下:

image

     從上面咱們能夠看出,內核加載地址和入口地址是同樣的:50008000,這是不合理的,入口地址應該是50008000,由於是uImage,須要在入口處添加文件頭。

   所以咱們進行以下修改:

   修改scripts/下的makefile.lib文件:將UIMAGE_ENTRYADDR ?= $(UIMAGE_LOADADDR) 改成:

   IMAGE_ENTRYADDR ?= $(shell echo $(UIMAGE_LOADADDR) | sed -e "s/..$$/40/")

修改後,再次make uImage, 編譯完後的輸出信息以下:

image
從上面咱們能夠看出,入口地址已經變爲50008040,

下載到板子上,已經能夠引導內核了。

從log能夠看出,咱們的nand flash並無識別到,由於出錯在這裏:

[06/08-11:25:41:371]s3c24xx-nand s3c6400-nand: failed to get clock

[06/08-11:25:41:371]s3c24xx-nand: probe of s3c6400-nand failed with error –2

爲了方便閱讀,我仍是在下一篇文章寫吧,目前這個問題是須要解決的。

 

完整啓動log以下:

相關文章
相關標籤/搜索