天天看點

linux 3.4.103 核心移植到 S3C6410 開發闆 移植失敗 (問題總結,來日再戰!)linux 3.4.103 核心移植到 S3C6410 開發闆

linux 3.4.103 核心移植到 S3C6410 開發闆

這個星期幾乎就搭在這裡面了,一開始感覺很不值得,移植這種浪費時間的事情,想立馬搞定,然後安安靜靜看書 & coding.

坑爹的事情就是一個多星期的時間搭進去了,還是沒成功。我把我的移植失敗的經驗留下來做為筆記,為下次做準備,也讓和我一起做移植的道友少走彎路.大家一起共同分享經驗,營造更好的開發環境。

查了很多資料,在此謝謝那些bloger, thanks for your spirit of sharing.

一. 從官網獲得幹淨的核心

https://www.kernel.org/

         我這裡選擇的是3.4.103,(其實已經試過很多版本的kernle了,都是失敗啊,心塞~,其實我在寫這篇blog的時候還在嘗試再做一次,現在這次我用的3.4.103)

我的開發闆是飛淩的s3c6410,開發闆供應商提供的kernel是經過他們處理的,是以不要用供應商的kernel source code. 那樣基本上啥經驗都賺不到

二. patching yaffs2檔案系統

在這個過程中我還發現yaffs2最近的版本是有問題的,源碼編譯過不了,有錯誤

http://blog.csdn.net/cinmyheart/article/details/38747505

換一個版本就正常了~ (坑爹~source code 錯誤!)

yaffs2-4e188b0.tar.gz

給核心打yaffs2檔案系統的更新檔 

解壓yaffs2源檔案壓縮包之後,執行yaffs2源代碼目錄下的一個shell script

./patch-ker.sh c  /Jason_with_ARM/linux-3.4.104/ 
           

上面指令完成下面三件事情: 

(1) 修改核心fs/Kconfig 

    增加一行:source "fs/yaffs2/Kconfig" 

(2) 修改核心fs/Kconfig 

    增加一行:ojb-$(CONFIG_YAFFS_FS) +=yaffs2/ 

(3) 在核心fs/目錄下建立yaffs2目錄 

    将yaffs2源碼目錄下面的Makefile.kernel檔案複制為核心fs/yaffs2/Makefie; 

    将yaffs2 源碼目錄的Kconfig檔案複制到核心fs/yaffs2目錄下; 

    将yaffs2源碼目錄下的*.c *.h檔案複制到核心fs/yaffs2目錄下. 

三. 配置核心!

               幹幹淨淨的核心移植到ARM平台還是要各種手動修改,麻煩的說~當然這也讓我更熟悉Kconfig Makfile的作用和關系

                linux 預設的Kconfig 和.config不是為ARM平台準備的So...

RT,copy arm目錄下的Kconfig 并且把s3c6400_defconfig copy成.config (s3c6400和s3c6410的配置差不多,于是核心就隻給出了一個config)

linux 3.4.103 核心移植到 S3C6410 開發闆 移植失敗 (問題總結,來日再戰!)linux 3.4.103 核心移植到 S3C6410 開發闆

運作一次make menuconfig 然後再添加點東東

照着下面這個blog的方法做,補全MTD選項

http://blog.csdn.net/cinmyheart/article/details/38754669

為了增加devfs檔案管理器的支援,補全fs/Kconfig

我們所用的檔案系統使用的是devfs檔案管理器。修改fs/Kconfig,

找到

menu "Pseudo filesystems"

添加如下語句:

config DEVFS_FS
         bool "/dev file system support (OBSOLETE)"
         default y    
config DEVFS_MOUNT
bool "Automatically mount at boot"
default y
depends on DEVFS_FS
           

對于menuconfig 裡沒有yaffs2選項的解決辦法

下面給出的link,有些細節其實是配置核心的一部分,不完全是為了解決yaffs2選項丢失的問題

http://blog.csdn.net/cinmyheart/article/details/38759549

修改根目錄下的Makefile,如圖

linux 3.4.103 核心移植到 S3C6410 開發闆 移植失敗 (問題總結,來日再戰!)linux 3.4.103 核心移植到 S3C6410 開發闆

接着修改MTD分區(這一步不完全正确,很可能這就是我為嘛沒有移植成功的原因)

             三星的晶片,一個系列都是從前面的型号慢慢改進衍生出來的新産品,是以就會出現s3c6410和s3c2410在一些基礎檔案配置上共用

修改./arch/arm/mach-s3c64xx/mach-smdk6410.c

添加如下代碼:

添加頭檔案 

</pre></p><pre name="code" class="cpp">
           
#include  <plat/sdhci.h>

#include <linux/mtd/partitions.h>

#include <mtd/mtd-abi.h>


struct s3c_ts_mach_info {
	int             	delay;
	int             	presc;
	int             	oversampling_shift;
	int			resol_bit;
	enum s3c_adc_type	s3c_adc_con;
};
           
linux 3.4.103 核心移植到 S3C6410 開發闆 移植失敗 (問題總結,來日再戰!)linux 3.4.103 核心移植到 S3C6410 開發闆
linux 3.4.103 核心移植到 S3C6410 開發闆 移植失敗 (問題總結,來日再戰!)linux 3.4.103 核心移植到 S3C6410 開發闆
linux 3.4.103 核心移植到 S3C6410 開發闆 移植失敗 (問題總結,來日再戰!)linux 3.4.103 核心移植到 S3C6410 開發闆
linux 3.4.103 核心移植到 S3C6410 開發闆 移植失敗 (問題總結,來日再戰!)linux 3.4.103 核心移植到 S3C6410 開發闆

注釋掉圖中注釋的部分,并且添加&s3c_device_nand

linux 3.4.103 核心移植到 S3C6410 開發闆 移植失敗 (問題總結,來日再戰!)linux 3.4.103 核心移植到 S3C6410 開發闆

在/arch/arm/plat-samsung/devs.c裡面修改這個函數

linux 3.4.103 核心移植到 S3C6410 開發闆 移植失敗 (問題總結,來日再戰!)linux 3.4.103 核心移植到 S3C6410 開發闆

修改注釋有added的那句話

linux 3.4.103 核心移植到 S3C6410 開發闆 移植失敗 (問題總結,來日再戰!)linux 3.4.103 核心移植到 S3C6410 開發闆

添加 .boot_params 選項

linux 3.4.103 核心移植到 S3C6410 開發闆 移植失敗 (問題總結,來日再戰!)linux 3.4.103 核心移植到 S3C6410 開發闆

修改 /drivers/mtd/nand/s3c2410.c

替換所有的(除了switch的選項外)指派語句包含的NAND_ECC_SOFT為NAND_ECC_NONE

Kernel Feature配置

linux 3.4.103 核心移植到 S3C6410 開發闆 移植失敗 (問題總結,來日再戰!)linux 3.4.103 核心移植到 S3C6410 開發闆

最後make zImage

最後的最後:可惜找了很多blog,還是沒能搞定這個問題,

有人說是

linux 3.4.103 核心移植到 S3C6410 開發闆 移植失敗 (問題總結,來日再戰!)linux 3.4.103 核心移植到 S3C6410 開發闆

繼續閱讀