大清早就被摇醒了,床摇的厉害,赶紧往外跑,原来地震了,太吓人啦。言归正传,继pcDuino的linux移植一,实现目标二移植内核
1,获取的linux源码
https://github.com/pcduino/kernel 选中linux的孙喜,下载LINUX-孙喜源码
2,配置,编译
解压上面下载的linux的孙喜孙喜-3.0.zip,并解压到Ubuntu的工作目录
改成@变化:〜$ CD build.sh加密固件初始化的Kconfig维护模块报告BUGS脚本工具 拱复制文档FS IPC内核的Makefile净rootfs的安全USR 整体学分司机包括内核编译的lib毫米自述样本声音的virt
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
来源:oschina
链接:https://my.oschina.net/u/1174645/blog/141930