大清早就被搖醒了,牀搖的厲害,趕忙往外跑,原來地震了,太嚇人啦。言歸正傳,繼pcDuino的linux移植一,實現目標二移植內核 node
1,獲取的linux源碼 linux
https://github.com/pcduino/kernel 選中linux的孫喜,下載LINUX-孫喜源碼 git
2,配置,編譯 github
解壓上面下載的linux的孫喜孫喜-3.0.zip,並解壓到Ubuntu的工做目錄 express
改爲@變化:〜$ CD build.sh加密固件初始化的Kconfig維護模塊報告BUGS腳本工具 拱複製文檔FS IPC內核的Makefile淨rootfs的安全USR 總體學分司機包括內核編譯的lib毫米自述樣本聲音的virt
ubuntu
2.1配置單板 緩存
改爲@變化:〜/ Si/A10/pcduino/linux-sunxi-sunxi-3.0號$ 找到名稱爲「* defconfig」 安全
./arch/arm/configs/sun4i_defconfig
./arch/arm/configs/netx_defconfig
./arch/arm/configs/vexpress_defconfig
./arch/arm/configs/g3evm_defconfig
./arch/arm/configs/at91rm9200_defconfig
./arch/arm/configs/pxa168_defconfig
./arch/arm/configs/at91sam9g20ek_defconfig
./arch/arm/configs/stamp9g20_defconfig
./arch/arm/configs/integrator_defconfig
./arch/arm/configs/sun3i_defconfig
./arch/arm/configs/pxa910_defconfig
./arch/arm/configs/h5000_defconfig
./arch/arm/configs/mini2440_defconfig
./arch/arm/configs/a13_defconfig
./arch/arm/configs/versatile_defconfig
./arch/arm/configs/mx1_defconfig
./arch/arm/configs/colibri_pxa270_defconfig
./arch/arm/configs/ixp2000_defconfig
./arch/arm/configs/sam9_l9260_defconfig
./arch/arm/configs/a12_nuclear_defconfig
./arch/arm/configs/s3c6400_defconfig
./arch/arm/configs/sun4i_crane_defconfig 工具
ARCH =手臂sun4i_defconfig的 # #配置寫的。config #改爲@變化:〜/ Si/A10/pcduino/linux-sunxi-sunxi-3.0號$ ARCH =臂menuconfig的的 HOSTCC腳本/ kconfig命令/ lxdialog / checklist.o的的 HOSTCC腳本/經過kconfig / lxdialog / inputbox.o的 HOSTCC腳本/ kconfig命令/ lxdialog / menubox.o的 HOSTCC腳本/ kconfig命令/ lxdialog / textbox.o的 HOSTCC腳本/ kconfig命令/ lxdialog / util.o的的 HOSTCC腳本/ kconfig命令/ lxdialog / yesno.o的的 HOSTCC腳本/經過kconfig / mconf.o的的的 HOSTLD腳本/ kconfig命令/ mconf 腳本/ kconfig命令/ mconf的Kconfig
測試
保存退出便可,若執行make menuconfig時報錯,須要安裝屏幕繪製動態庫,安裝過程以下:
改變@變化:〜/ Si/A10/pcduino/linux-sunxi-sunxi-3.0號$ sudo易於獲得安裝與libncurses5
2.2編譯
編譯器能夠選用本身的,這裏繼續用pcduino的linux的移植一配置的交叉編譯鏈
改爲@變化:〜/ Si/A10/pcduino/linux-sunxi-sunxi-3.0,$ ARCH = ARM CROSS_COMPILE =臂沒有Linux的gnueabi的uImage
出現以下錯誤:
在文件中包括從包括/ LINUX / memory_hotplug.h:6
從包括/ LINUX / mmzone.h的:671,
包括/ linux / topology.h中:32,
包括/ LINUX / sched.h中:78,
從拱/臂/核/ ASM offsets.c的的:13:
包括/ linux / notifier.h中:15:致命錯誤:LINUX / srcu.h:沒有這樣的文件或目錄
彙編終止。
[1]:*** [弓/臂/內核/ ASM-offsets.s的錯誤1
品牌:***錯誤2 [prepare0]
2.3解決問題
根據包括/ linux下/ notifier.h的:15:致命錯誤:LINUX / srcu.h:沒有這樣的文件或目錄解決錯誤,解決過程以下:
改爲@變化:〜/ Si/A10/pcduino/linux-sunxi-sunxi-3.0號$ VIM包括/ linux / notifier.h中的
15:#包括<linux/srcu.h>的的
接着發現include/linux/目錄下的確沒有srcu.h,非常納悶之前編譯都沒有這個錯誤,因而到linux-3.0.62下相應目錄拷貝include/linux/srcu.h文件,繼續編譯
改爲@變化:〜/ Si/A10/pcduino/linux-sunxi-sunxi-3.0,$ ARCH = ARM CROSS_COMPILE =臂沒有Linux的gnueabi的uImage
上面的錯誤沒了,編譯過程有點長,吃完飯繼續
LD vmlinux的
SYSMAP的System.map
SYSMAP。tmp_System.map
objcopy把弓/手臂/開機/圖像
內核:弓/手臂/引導/影像準備
弓/手臂/開機/壓縮/ head.o
CC拱的AS /手臂/開機/壓縮/ misc.o
GZIP拱/手臂/開機/壓縮/ piggy.gzip的
CC弓/手臂/啓動/壓縮/ decompress.o的
SHIPPED arch/arm/boot/compressed/lib1funcs.S的
AS arch/arm/boot/compressed/lib1funcs的Ø
如弓/ ARM /啓動/壓縮/ piggy.gzip.o
LD拱/手臂/引導/壓縮/ vmlinux的
objcopy把弓/手臂/ boot / zImage等
內核的:弓/手臂/ boot / zImage等準備
的uImage弓/手臂/開機/的uImage
圖片名稱:Linux的3.0.62
建立時間:週六4月20日18點33分26秒2013
圖片類型:ARM Linux內核映像(未壓縮)
數據大小:4693068字節= 4583.07 KB = 4.48 MB
加載地址:40008000
入口點: 40008000
圖像拱/手臂的/ boot /的uImage準備的
終於編譯完了,已生成弓/ ARM /開機/的uImage,說明編譯成功。
3,燒寫,測試
插上TF卡,查看設備
改爲@變化:〜/ Si/A10/pcduino/linux-sunxi-sunxi-3.0 $ LS的/ dev / sdb的
SDB SDB1
3.1燒寫的u-boot
過程參考pcduino的linux的移植一:
改爲@變化:〜/ Si/A10/pcduino/linux-sunxi-sunxi-3.0 $ cd ..後/ U-boot的孫喜孫喜/ 變動變化:〜/ Si/A10/pcduino/u-boot-sunxi-孫喜$ sudo的DD若是= / dev / zero的= / dev / sdb上的BS = 1M數= 1 [sudo的密碼變化: 1 +0 1 +0記錄了 1048576字節(1.0 MB)的記錄複製,0.0103637Ş 101 MB / s的 變化變化:〜/ Si/A10/pcduino/u-boot-sunxi-sunxi $ sudo的用sfdisk-R / dev / sdb上的BLKRRPART:設備或資源忙 這個磁盤正在使用中。
出現這種BLKRRPART:設備或資源 用sfdisk-R / dev / sdb上的
改爲@變化:〜/ Si/A10/pcduino/u-boot-sunxi-sunxi $ sudo的貓「EOT |須藤用sfdisk階UM爲/ dev / sdb的
1,16,C
,,L
> EOT
檢查,沒有人正在使用該磁盤如今...
OK
磁盤/ dev / sdb上的:1020柱面,31磁頭,61扇區/磁道
用sfdisk:錯誤:0扇區沒有一個MSDOS簽名
爲/ dev / sdb的:沒法識別的分區表型
舊的狀況:
沒有分區發現
新狀況:
單位= 1048576字節,1024字節的塊,從0開始計數mebibytes
裝置開機開始結束MIB#塊ID系統
/ dev/sdb1 0 + 17 - 17 - 17019çW95 FAT32(LBA)
/ dev/sdb2 17日的941 - 925 - 946445 + 83 Linux的
將/ dev/sdb3 0 - 0 0 0空
/ dev/sdb4,0 - 0 0 0空
警告:沒有主分區標記爲可引導的(活動),
這沒關係LILO,但在DOS MBR磁盤將沒法啓動。
成功寫下了新的分區表
從新讀取分區表...
若是您建立或改變一個DOS分區,/ dev/foo7說,而後使用dd(1)
零的前512個字節:日= / dev / zero的= / dev/foo7 BS = 512計數= 1
(見FDISK(8))變化變化:〜/ Si/A10/pcduino/u-boot-sunxi-sunxi $ sudo的用sfdisk-L爲/ dev / sdb的
磁盤/ dev / sdb上的:1020柱面,31磁頭,61扇區/磁道
單位= 968192字節,1024字節的塊氣瓶,從0開始計數
裝置開機開始結束##塊ID系統
/ dev/sdb1 1 18 18 17019ÇW95 FAT32(LBA)
/ dev/sdb2 19 1019 1001 946445 + 83 Linux的
將/ dev/sdb3 0 - 0 0 0空
/ dev/sdb4,0 CYLS - 0 0 0空變化的變化:〜/ Si/A10/pcduino/u-boot-sunxi-sunxi $ sudo的mkfs.vfat / dev/sdb1將 mkfs.vfat 3.0.7(2009年12月24日)改變@變化:〜/ Si/A10/pcduino/u-boot-sunxi-sunxi $ sudo的對mkfs.ext4 / dev/sdb2 mke2fs的1.41.11(2010年3月14日) 文件系統標籤= 操做系統:Linux的 塊大小= 4096(登陸= 2) 分塊大小= 4096(日誌= 2) 步= 0塊,磁條寬度= 0塊 59264的inode,236611塊 11830塊(5.00%)爲超級用戶保留 第一個數據塊= 0的 最大文件系統塊= 243269632 8塊組 32768每一個組塊,每一個組, 每一個組 的超級塊備份存儲7408個inode 塊32768片斷: 32768,98304,163840,229376
正在寫入的inode表:完成
建立雜誌(4096塊):完成
寫入超級塊和文件系統會計信息:完成
這個文件系統將自動檢查每30的坐騎或
180天,以先到者爲準。請改成使用tune2fs-c或-i的覆蓋。
改爲@變化:〜/ Si/A10/pcduino/u-boot-sunxi-sunxi $ sudo的DD若是= = / dev / sdb上的BS = 1024 SPL /孫喜spl.bin的尋求= 8
20 0條記錄中
20 +0的記錄了
20480個字節(20 KB)複製,0.0256702Ş,798 KB / s的
變化變化:〜/ Si/A10/pcduino/u-boot-sunxi-sunxi $ sudo的DD若是=的u-boot.bin尋求= / dev / sdb上的BS = 1024 = 32
171 +1
171 +1
175272字節記錄了記錄(175 KB)複製,0.105589Ş,1.7 MB / s的
取下TF卡,插入pcduino,接上串口線設置115200 8 N 1,默認從TF卡啓動,啓動界面以下:
U-Boot的SPL 2012.10(2013年4月19日- 18時46分44秒)
內存:1024MB
孫喜SD / MMC:0
U-Boot的2012.10(2013年4月19日 - 18時46分44秒)全志科技
CPU:孫喜家庭
電路板:pcDuino
I2C:準備
DRAM:1 GIB
MMC:孫喜SD / MMC:0
***警告-壞CRC,使用默認的環境
:串行
輸出:串行
錯誤:串行
命中任意鍵中止自動引導:0
sun4i#
3.2燒寫linux內核的
準備工做:
製做對對A10芯片進行配置的二進制文件script.bin
獲取源碼:https://github.com/pcduino/kernel選擇孫喜工具,並下載
改爲@變化:〜/ Si/A10/pcduino/linux-sunxi-sunxi-3.0號$ CD /孫喜工具主/
改爲@變化:〜/ Si/A10/pcduino/sunxi-tools-master $
使出現以下錯誤:
的libusb-1.0軟件包pkg-config的搜索路徑中沒有找到,
也許你應該添加libusb的1.0.pc
PKG_CONFIG_PATH環境變量
沒有包'的libusb-1.0發現
包裝的libusb-1.0中找不到該目錄包 含pkg-config的搜索路徑,
也許你應該添加的目錄包 含的libusb 1.0.pc
PKG_CONFIG_PATH環境變量
沒有包'的libusb-1.0「找到
文件,能把*。FEX文件生成*。二進制文件)
獲取源碼https://github.com/pcduino/kernel選擇孫喜板,
利用上面生成的工具fex2bin,將sunxi-boards/sys_config/a10/pcduino.fex文件生成對A10芯片進行配置的二進制文件script.bin
改變@變化:〜/ Si/A10/pcduino/sunxi-tools-master $ ./fex2bin .. / sunxi-boards/sys_config/a10/pcduino.fex script.bin
下面開始燒寫TF卡,插入TF卡到ubuntu的
改變@變化:〜/ Si/A10/pcduino/linux-sunxi-sunxi-3.0號$ sudo的安裝/ dev/sdb1到/ mnt /
[sudo的密碼改變:
改變@變化:〜/ Si/A10/pcduino/linux-孫喜孫喜-3.0 $ CP弓/手臂/開機/的uImage到/ mnt /
改變@變化:〜/ Si/A10/pcduino/sunxi-tools-master $ CP script.bin到/ mnt /
變化變化:〜/ Si/A10/pcduino/sunxi-tools-master $須藤UMOUNT的到/ mnt /
取下TF卡,插到pcduino,接好串口線設置爲115200 8 N1,啓動信息以下:
U-Boot的SPL 2012.10(2013年4月19日- 18時46分44秒)
內存:1024MB
孫喜SD / MMC:0
U-Boot的2012.10(2013年4月19日 - 18時46分44秒)全志科技
CPU:孫喜家庭
電路板:pcDuino
I2C:準備
DRAM:1 GIB
MMC:孫喜SD / MMC:0
***警告-壞CRC,使用默認的環境
:串行
輸出:串行
錯誤:串行
命中任意鍵中止自動引導:0
閱讀uEnv.txt
**沒法從MMC 0:1中,讀「uEnv.txt」的**
加載文件「uEnv.txt」的MMC設備0:1
ext2文件系統安裝失敗...
**壞ext2分區或磁盤- MMC 0:1 **
ext2load -從Ext2文件系統負載的二進制文件
的用途:
ext2load <interface>參數<dev[:part]> [地址] [文件名] [字節]
-負載二進制文件「filename」從「開發」的「接口」,
解決'地址'從ext2文件系統
裝載文件「啓動/ 「MMC設備0:1 uEnv.txt
ext2文件系統安裝失敗...
**壞ext2分區或磁盤- MMC 0:1 **
ext2load的-從Ext2文件系統負載的二進制文件
的用途:
ext2load <interface>參數<dev[:part]> [地址] [文件名] [字節]
-負載二進制文件「filename」從'開發'「接口」
,以解決'地址'從ext2文件系統上
讀取boot.scr
**沒法讀取MMC 0:1 **
裝載文件的「boot.scr」,從MMC設備0:1的的「boot.scr」
ext2文件系統安裝失敗...
**壞ext2分區或磁盤- MMC 0:1 **
ext2load -從Ext2文件系統負載的二進制文件
的用途:
ext2load <interface>參數<dev[:part]> [地址] [文件名] [字節]
-負載二進制文件「filename」從「開發」的「接口」,
解決'地址'從ext2文件系統
裝載文件「啓動/ 「MMC設備0:1 boot.scr
ext2文件系統安裝失敗...
**壞ext2分區或磁盤- MMC 0:1 **
ext2load的-從Ext2文件系統負載的二進制文件
的用途:
ext2load <interface>參數<dev[:part]> [地址] [文件名] [字節]
-負載二進制文件「filename」從'開發'「接口」
,以解決'地址'從ext2文件系統上
讀取script.bin
44900字節讀
閱讀的uImage
4693132字節讀
#從傳統的圖像引導內核在48000000 ...
圖片名稱:Linux的3.0.62
圖片類型:ARM Linux內核映像(未壓縮)
數據大小:4693068字節= 4.5 MIB
加載地址:40008000
報名點:40008000
驗證校驗... OK
加載內核映像... OK
OK
從內核開始...
<6>初始化子系統的cgroup CPUSET
<5> Linux版本3.0.62(改爲@變化)(gcc版本4.4.1(的Sourcery G+ +建興2009Q3-67))#1 PREEMPT週六4月20日18時32分39秒CST 2013
CPU:的ARMv7處理器413fc082]修訂版2(ARMv7體系),CR = 10c5387d的
CPU:VIPT的nonaliasing數據緩存,VIPT別名指令緩存
機:sun4i
<6>記憶切斷:
<6>馬裏:0x5c000000 - 0x5fffffff(64 MB)
<4>忽略沒法識別的標記0×00000000
<6>內存保留
:<6> SYS:0×43000000 - 0x4300ffff(64 KB)
<6> VE:0×44000000 - 0x48ffffff(80 MB)
<6> G2D:0×49000000 - 0x49ffffff (16 MB)
<6>液晶:0x5a000000 - 0x5bffffff的
存儲器(32 MB)政策:ECC禁用,數據高速緩存回寫
<6>芯片ID:A10(AW1623修訂版C)
<7>在節點0總頁數:245760
<7> free_area_init_node:節點0,pgdat c0887ea0,node_mem_map c094e000
<7>普通區:1280頁用於MEMMAP
<7>正常區域:保留0頁
<7>普通區:146176頁,後進先出法批:31
<7> HIGHMEM區:768 MEMMAP用於頁面
<7>區HIGHMEM:97536頁,後進先出批量:31
<7> PCPU ALLOC:S0 R0 d32768 u32768的alloc = 1 * 32768
<7> PCPU ALLOC:[0] 0
內置1區順序運行咱們,移動分組上。總頁數:243712
<5>內核命令行:請將console = ttyS0,115200根= / dev/mmcblk0p2 rootwait的日誌級別= 8恐慌= 10
............ / /太長了此處省略·若干
<0>內核恐慌-不一樣步:試圖殺害的init!
[2.650000]內核恐慌-不一樣步:試圖殺死的init!
<c003e92c>](+0 unwind_backtrace×0/0x13c)從[<c05fa2ac>](恐慌+0×74/0×188)
[2.660000] [<c003e92c>](unwind_backtrace +0從×0/0x13c)[<c05fa2ac>](驚恐+0×74/0×188)
[<c05fa2ac>](恐慌+0×74/0)[<c006bfd0>](do_exit +0 x6c4 / 0×188×788)
[2.670000] [<c05fa2ac>](恐慌+0×74/0×188)[<c006bfd0>]( do_exit +0 x6c4 / 0×788)
[<c006bfd0>](do_exit +0 x6c4 / 0×788)[<c003c87c>](模具+0×288/0×300)
[2.690000] [<c006bfd0>](do_exit + 0x6c4 / 0)[<c003c87c>](模具+0×288/0×788×300)
[<c003c87c>](模具+0×288/0×300)從[<c0042cb0>](__do_kernel_fault +0× 74/0×84)
[2.700000] [<c003c87c>](模具+0×288/0×300)[<c0042cb0>](__do_kernel_fault +0×74/0×84)
[<c0042cb0>](__do_kernel_fault + 0×74/0×84)從[<c0042e40>](do_page_fault +0×180/0x2e4)
[2.720000] [<c0042cb0>]「(__do_kernel_fault +0×74/0×84)[<c0042e40>,](do_page_fault +0×180/0x2e4)
[<c0042e40>](do_page_fault +0×180/0x2e4)從[<c00312b4>](do_DataAbort +0×34/0×98)
[2.730000] [<c0042e40>](do_page_fault +0 ×180/0x2e4)從[<c00312b4>](do_DataAbort +0×34/0×98)
[<c00312b4>] [<c0037dd0>](__dabt_svc +0×70(do_DataAbort +0×34/0×98) / 0XA0)
[2.750000] [<c00312b4>](do_DataAbort +0×34/0×98)[<c0037dd0>](__dabt_svc +0×70/0xa0)
異常的堆棧(0xe783bee8 0xe783bf30)
[2.770000]異常堆棧( 0xe783bee8 0xe783bf30)
bee0::29c5c734 00000000 1137666c f1c20800 00000001 55866a9a
[2.780000] bee0:29c5c734 00000000 1137666c f1c20800 00000001 55866a9a
BF00:c0039358 00000000 00000001 6239831b c0944588 11376664 1137665c e783bf30,
[2.790000] BF00:c0039358 00000000 00000001 6239831b c0944588 11376664 1137665c e783bf30
BF20:f8a905a8 c0059aac 20000013 FFFFFFFF
[2.810000] BF20:20000013 c0059aac f8a905a8 FFFFFFFF
[<c0037dd0>](__dabt_svc +0×70/0xa0)[<c0059aac>](sunxi_gpio_request_array +0×160/0×540)
[2.810000] [<c0037dd0>] (__dabt_svc +0×70/0xa0)從[<c0059aac>](sunxi_gpio_request_array +0×160/0×540)
[<c0059aac>](sunxi_gpio_request_array +0×160/0×540)[<c040b868>](alloc_pin,中XC / 0 +0×60)
[2.830000] [<c0059aac>]「(sunxi_gpio_request_array +0×160/0×540)從[<c040b868>](alloc_pin +0 / 0×60)
[<c040b868>](alloc_pin +0 XC XC / 0×60)從[<c00209cc>](sw_hci_sunxi_init +0 X3C / 0×144)
[2.850000] [<c040b868>](alloc_pin +0 XC / 0×60)從[<c00209cc>](sw_hci_sunxi_init +0 / 0 X3C× 144)
[<c00209cc>](sw_hci_sunxi_init +0 X3C / 0)[<c0031378>]「(do_one_initcall +0×34/0×144×180)
[2.870000] [<c00209cc>](sw_hci_sunxi_init +0 / 0 X3C×144)從[<c0031378>](do_one_initcall +0×34/0×180)
[<c0031378>](do_one_initcall +0×34/0)[<c00084d4>](kernel_init +0×180×108/0×194)
[2.880000] [<c0031378>](do_one_initcall +0×34/0×180×194)[<c00084d4>](kernel_init +0×108/0)
[<c00084d4>](kernel_init +0×108/0× 194)[<c0039358>](kernel_thread_exit +0×0/0×8)
[2.900000] [<c00084d4>](kernel_init +0×108/0×194)來自[<c0039358>的(kernel_thread_exit +0×0 / 0×8)
<0>從新啓動在10秒.. [2.920000]在10秒內從新啓動..
linux的內核終於啓動了,看到啓動信息就知道出現很多問題。
pcduino的linux移植二寫的太長了,根文件系統移植以及未解決的問題留在pcduino的linux移植三。
有些問題還未解決,知道的直接留言,咱們一塊兒解決。
SD卡燒寫參考http://linux-sunxi.org/Bootable_SD_card
轉載自CSDN,感謝我用國芯分享。
原帖地址:http://blog.csdn.net/u010216127/article/details/8828418