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)
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISNxMDMzkDNzIzMygDM0EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
運作一次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,如圖
接着修改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;
};
注釋掉圖中注釋的部分,并且添加&s3c_device_nand
在/arch/arm/plat-samsung/devs.c裡面修改這個函數
修改注釋有added的那句話
添加 .boot_params 選項
修改 /drivers/mtd/nand/s3c2410.c
替換所有的(除了switch的選項外)指派語句包含的NAND_ECC_SOFT為NAND_ECC_NONE
Kernel Feature配置
最後make zImage
最後的最後:可惜找了很多blog,還是沒能搞定這個問題,
有人說是