一、相關資料獲取
我個人在學習 mini2440 開發板時是跟着韋東山老師的視頻學習的,視頻和資料可以訪問百問網論壇獲取。
百問網論壇鏈接: http://www.100ask.net/bbs/forum.php
下載好資料后在 "JZ2440資料光盤" 文件中 systems 目錄下可以獲取到 linux-2.6.22.6.tar.bz2(內核源碼包)和 linux-2.6.22.6_jz2440.patch(韋東山老師移植 linux-2.6 到 JZ2440 開發板的 patch 包)。在第一期視頻目錄下可以獲取到 "韋東山Linux視頻第1第2期所有源碼文檔圖片芯片手冊.rar" 壓縮包。
二、配置編譯 linux-2.6
1. 將下載好的內核源碼包和對應的 Patch 包復制到 Ubuntu 虛擬機 /home/user/workspace/s3c2440/package 目錄下。
2. 解壓 linux-2.6 內核源碼到上級目錄,也就是 /home/user/workspace/s3c2440/ 目錄下。
user@vmware:~/workspace/s3c2440/package$ tar jxf linux-2.6.22.6.tar.bz2 -C ../
3. 切換到 linux-2.6 目錄下,給 linux-2.6 打補丁。
user@vmware:~/workspace/s3c2440/package$ cd ../linux-2.6.22.6/ user@vmware:~/workspace/s3c2440/linux-2.6.22.6$ patch -p1 < ../package/linux-2.6.22.6_jz2440.patch
4. 移植 mini2440 的 lcd 和網卡驅動到此 linux-2.6 內核中。
在 /home/user/workspace/s3c2440/ 目錄下建立 mini2440/drivers/ 子目錄。
user@vmware:~/workspace/s3c2440/linux-2.6.22.6$ mkdir -p ../mini2440/drivers
將 "韋東山Linux視頻第1第2期所有源碼文檔圖片芯片手冊.rar" 壓縮包中 mini2440 對應的 lcd 和網卡驅動復制到虛擬機中 /home/user/workspace/s3c2440/mini2440/drivers/ 下。
然后使用 mini2440 的 lcd 和網卡驅動替換 linux-2.6 內核中 lcd 和網卡驅動。
user@vmware:~/workspace/s3c2440/linux-2.6.22.6$ cp -a ../mini2440/drivers/lcd.c drivers/video/s3c2410fb.c user@vmware:~/workspace/s3c2440/linux-2.6.22.6$ cp -a ../mini2440/drivers/dm9dev9000c.c drivers/net/dm9dev9000c.c
5. 配置編譯 linux-2.6 內核。
user@vmware:~/workspace/s3c2440/linux-2.6.22.6$ cp config_ok .config user@vmware:~/workspace/s3c2440/linux-2.6.22.6$ make uImage
6. 編譯報錯了。
user@vmware:~/workspace/s3c2440/linux-2.6.22.6$ make uImage
Makefile:1449: *** mixed implicit and normal rules: deprecated syntax /home/user/workspace/s3c2440/package/linux-2.6.22.6/Makefile:416: *** mixed implicit and normal rules: deprecated syntax /home/user/workspace/s3c2440/package/linux-2.6.22.6/Makefile:1449: *** mixed implicit and normal rules: deprecated syntax make[1]: *** No rule to make target 'silentoldconfig'。 停止。 CHK include/linux/version.h UPD include/linux/version.h make: *** No rule to make target 'include/config/auto.conf', needed by 'include/asm-arm/.arch'。 停止。
是由於我的 Ubuntu 系統的 make 工具太新,make 的舊版規則已經無法兼容新版。按照如下方式修改 Makefile 可以解決。
diff --git a/Makefile b/Makefile index 9b456d0..0d6d38a 100644 --- a/Makefile +++ b/Makefile @@ -413,7 +413,8 @@ ifeq ($(config-targets),1) include $(srctree)/arch/$(ARCH)/Makefile export KBUILD_DEFCONFIG -config %config: scripts_basic outputmakefile FORCE +# config %config: scripts_basic outputmakefile FORCE +%config: scripts_basic outputmakefile FORCE $(Q)mkdir -p include/linux include/config $(Q)$(MAKE) $(build)=scripts/kconfig $@ @@ -1446,7 +1447,8 @@ endif $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) # Modules -/ %/: prepare scripts FORCE +# / %/: prepare scripts FORCE +%/: prepare scripts FORCE $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \ $(build)=$(build-dir) %.ko: prepare scripts FORCE
7. 再次執行編譯命令,發現還會報錯。
user@lenovo:~/workspace/s3c2440/linux-2.6.22.6$ make uImage
... ... Kernel: arch/arm/boot/zImage is ready UIMAGE arch/arm/boot/uImage "mkimage" command not found - U-Boot images will not be built Image arch/arm/boot/uImage is ready
提示說 mkimage 命令沒有找到。這里需要安裝 u-boot-tools 工具,執行下面這條命令開始安裝。
user@vmware:~/workspace/s3c2440/linux-2.6.22.6$ sudo apt-get install u-boot-tools
8. 安裝 u-boot-tools 后,重新編譯,終於編譯成功了。
user@vmware:~/workspace/s3c2440/linux-2.6.22.6$ make uImage
... ... Kernel: arch/arm/boot/Image is ready Kernel: arch/arm/boot/zImage is ready UIMAGE arch/arm/boot/uImage Image Name: Linux-2.6.22.6-ga4f2d4e4-dirty Created: Thu Oct 12 23:20:24 2017 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 1848740 Bytes = 1805.41 kB = 1.76 MB Load Address: 30008000 Entry Point: 30008000 Image arch/arm/boot/uImage is ready
9. 編譯成功后,將會在 arch/arm/boot/ 目錄下生成 uImage 內核鏡像文件。
user@vmware:~/workspace/s3c2440/linux-2.6.22.6$ ll arch/arm/boot/uImage -rw-rw-r-- 1 user user 1848804 10月 12 23:20 arch/arm/boot/uImage
參考博文:http://blog.csdn.net/sinat_24088685/article/details/51009472