(二)linux内核镜像制作
(一)目的
在進行嵌入式開發的時候,我們往往會先在電腦上安裝交叉編譯器,然后編譯目標板上的代碼,最后把代碼下載到電路板中,嵌入式系統組成包括:BootLoader+kernel+filesystem+application,前面我們已經制作好了BootLoader,這一節我們制作一個kernel鏡像
(二)工具
- linux-3.5版本內核
- Ubuntu 16.04
- linux交叉編譯環境(我已經安裝過,沒有安裝的可以下載arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz)
這里說明一點我們獲取linux內核一般可以從linux官方獲取,或者從開發板的廠商那獲取,我比較推薦第二種,因為第一種還需要我們進行有關硬件的配置
(三)操作流程
1、將linux-3.5-20141114.tar拷貝到Linux系統中
2、解壓linux-3.5-20141114.tar
tar -xvf linux-3.5-20141114.tar3、進入解壓后的目錄
make menuconfig:打開配置界面,若無法打開需要安裝庫 apt install ncurses-dev
運行make menuconfig打開上面的窗口可以進行內核功能的刪減
按下面的步驟修改一個地方:
4、修改內核的頂層Makefile
因為最終內核運行到arm開發板,編譯需要在PC端,所以需要使用到交叉編譯器,在Makefile里指定交叉編譯器為arm-linux-
5、拷貝Linux3.5目錄下的tiny4412_linux_defconfig為默認配置文件
6、編譯內核
make -j8若出現一下錯誤:
Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at kernel/timeconst.pl line 373. /driver/linux-3.5/kernel/Makefile:133: recipe for target 'kernel/timeconst.h' failed make[1]: *** [kernel/timeconst.h] Error 255 make[1]: *** 正在等待未完成的任務....修改kernel/timeconst.pl的373行:
if (!defined(@val)) {@val = compute_values($hz);} 為 if (@val) {@val = compute_values($hz);}7、燒寫內核到SD卡
編譯完成會提示:Kernel: arch/arm/boot/zImage is ready
將SD卡插入讀卡器并連接到Ubuntu
cd arch/arm/boot dd iflag=dsync oflag=dsync if=./zImage of=/dev/sdb seek=1057大概持續40秒
8、驗證是否燒寫成功
將SD卡拔出插到自己的開發板上驗證,啟動后在串口里會提示內核啟動的流程即為成功
總結
以上是生活随笔為你收集整理的(二)linux内核镜像制作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows怎么用u盘备份系统分区表
- 下一篇: 随机数归并排序c语言,用C语言实现归并排