操作系統:Ubuntu 14.04
交叉編譯工具鏈:arm-linux-gcc4.4.1
1. 下載linux內核
在ubuntu系統終端輸入: wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.8.3.tar.xz
(內核下載官網:www.kernel.org)
2.解壓內核
tar xvf linux-3.8.3.tar.xz
3.將uboot2012.10 tools目錄下的mkimage文件復制到/usr/bin目錄下
cp u-boot-2012.10/tools/mkimage /usr/bin
4.進入linux內核頂層目錄,進行配置清除
cd linux-3.8.3
make distclean
5.修改頂層Makefile,指定處理器類型和交叉編譯工具鏈
修改 ARCH ?= $(SUBARCH) 為 ARCH ?= arm
修改 CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%) 為 CROSS_COMPILE ?= arm-linux-
6.初步配置內核
make s5pv210_defconfig
注意:s5pv210_defconfig 可以通過查看 /arch/arm/configs 下的配置文件得到
7.修改內核配置
make menuconfig
出錯:
缺少庫,接下來安裝ncurses庫
apt-get install libncurses*
再重新 make menuconfig
8.按默認配置初步編譯內核
make uImage
9.修改加載地址和入口地址
vim scripts/Makefile.lib
將 UIMAGE_ENTRYADDR ?= $(UIMAGE_LOADADDR) 修改為 UIMAGE_ENTRYADDR ?= $(shell echo $(UIMAGE_LOADADDR)|sed -e "s/..$$/40/")
10.燒寫內核到sd卡
dd iflag=sync oflag=sync if=uImage of=/dev/sdb seek=1000
運行下程序,卡死在 starting kernel 。。。
首先 懷疑打印信息的串口 是否是正確的 我使用的是串口0作為調試接口
make menuconfig 查看 果然 linux內核用的是串口1 修改配置如下
System Type ---> (0) S3C UART to use for low-level messages
S5PV210 Machines --->[*] SMDKV210
再次燒寫,串口就有信息了。
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2016-11/137078p2.htm