Pcduino下linux的Uboot Kernel Roofs制作烧写

来源:互联网 发布:中科vipexam数据库 编辑:程序博客网 时间:2024/05/21 21:48

http://blog.csdn.net/msq19895070/article/details/17437619

http://my.oschina.net/pcduino/blog/141917

http://blog.csdn.net/morningtzh/article/details/24845667

http://blog.csdn.net/xdw1985829/article/details/39077611

http://blog.csdn.net/akunainiannian/article/details/22975279

最近买了一个pcduino,看起来硬件配置不错,有1G的主频。官方发布了他们做的系统,用起来像个电脑,体验一般但是用来开发和实现创意想法,还是很不错的。图形化界面,里面还是装了很多驱动和应用,速度上有些慢。我打算将来移植QTOpencv,运行图像处理算法和这方面的验证性试验,这个做好的系统显得太冗余,我想做个最小的系统,以后需要什么驱动在往里面添加。顺便学学整个系统的构架,搞懂了发布最后的镜像文件。二来我觉得这样最精简的系统,跑图像处理算法会更快些。

网上也已经有网友发布了一系列文章,来讲解pcduino的移植,我也是更具这位网友的文章移植内核的,使用起来基本没有什么问题,但是有些细节我也不太明白。这文章就是解释这些细节,以及我遇到的一些问题。下面是这个网友的网站地址:

http://blog.csdn.net/u010216127/article/category/1387771

第一阶段编译UBOOT,Kernel,Rootfs

 开发环境:ubuntu12.04

 硬件:PCduino,Cortex_A8,主频1G

 编译器:arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

 UBOOT源码地址https://github.com/pcduino/kernel 

 交叉编译器地址http://code.google.com/p/smp-on-qemu/downloads/list 

 我用的各个源码都是pcduino光盘里面自带的,网上也有,可能版本或有不同,请结合其他文章参考。

1.1.1开发环境搭建

   解压交叉编译器

Sudo bunzip2 arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

Sudo tar xvf arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar

  添加编译器路径的环境变量

Sudo vim /etc/environment

PAHT里面添加“;/…./arm-2009q3/bin”我在这里写的是省略号,请根据自己的解压路径填写完整。

 

如果解压和环境变量填写完整使用如下命令可以验证

Sudo arm-none-linux-gnueabi-gcc –v

这个命令是显示gcc编译器的版本信息的,我的打印信息如下

gcc version 4.4.1 (Sourcery G++ Lite 2009q3-67)

 

如果没有显示请sudo source /etc/environment 确保环境变量被更新。至于64位系统还要安装一个库文件请参考网友的文章。

 

1.1.2编译UBOOT

解压UBOOT

Sudo unzip u-boot-sunxi-sunxi.zip

Sudo cd u-boot-sunxi-sunxi

Sudo make pcduino CROSS_COMPILE=arm-none-linux-gnueabi-

需要编译一段时间,编译顺利结束的话,会生成第一阶段/spl/sunxi-spl.bin 、第二阶段 /u-boot.bin

 

1.1.3编译内核源码

    解压内核源码,网上同样有,我用的内核源码是pcduino是光盘自带的,解压到自己定义的目录,并打开进入源码目录

Sudo  cd  /pcduino_file/kernel/kernel/linux-sunxi/linux-sunxi-sunxi-3.0

Sudo ls

Android.mk  CREDITS        fs       Kconfig      mm              REPORTING-BUGS  sound       vmlinux arch        crypto         include  kernel       modules         rootfs          System.map  vmlinux.o block      Documentation  init     lib Module.symvers  samples tools build.sh    drivers        ipc  MAINTAINERS  net scripts usr COPYING     firmware       Kbuild   Makefile     README          security        virt

设置配置文件

Sudo make ARCH=arm sun4i_defconfig

#
# configuration written to .config
#

进入图形化配置界面,注意终端界面尺寸要够大,否则进入不了配置界面。

Sudo make ARCH=arm menuconfig

HOSTCC  scripts/kconfig/lxdialog/checklist.o
  HOSTCC  scripts/kconfig/lxdialog/inputbox.o
  HOSTCC  scripts/kconfig/lxdialog/menubox.o
  HOSTCC  scripts/kconfig/lxdialog/textbox.o
  HOSTCC  scripts/kconfig/lxdialog/util.o
  HOSTCC  scripts/kconfig/lxdialog/yesno.o
  HOSTCC  scripts/kconfig/mconf.o
  HOSTLD  scripts/kconfig/mconf
  scripts/kconfig/mconf Kconfig

保存退出即可,若执行make menuconfig报错,需要安装屏幕绘制动态库,安装过程

Sudo apt-get install libncurses5

这里是调整一些内核配置,根据自己的要求修改。

编译内核源码

Sudo make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage

打印文字如下说明编译成功

  AS      arch/arm/boot/compressed/piggy.gzip.o
  LD      arch/arm/boot/compressed/vmlinux
  OBJCOPY arch/arm/boot/zImage
  Kernel: arch/arm/boot/zImage is ready
  UIMAGE  arch/arm/boot/uImage
 Image Name:   Linux-3.0.62
 Created:      Sat Apr 20 18:33:26 2013
 Image Type:   ARM Linux Kernel Image (uncompressed)
 Data Size:    4693068 Bytes = 4583.07 kB = 4.48 MB
 Load Address: 40008000
 Entry Point:  40008000
 Image arch/arm/boot/uImage is ready

arch/arm/boot/文件夹下生成内核文件,因为我没有添加其他驱动所以编译得到的内核很小才4.5MB左右,由此看来linux系统很是短小精干哪。这里我只是先把最小的系统搭起来,驱动的添加以后肯定还要修改。

1.1.4制作根文件系统

移植根文件系统首先需要安装busybox

获取源码在:http://www.busybox.net/  点击BusyBox 1.21.0下载源码,解压到工作目录并进入该目录

Sudo make menuconfig

先采取默认配置,不行在改回来在配置界面里面把builid option  Build BusyBox as astatic binary (no shared libs) 把这个选上

修改Makefile文件里面的编译器名字和平台名字

Sudo vim Makefile

修改:

164CROSS_COMPILE ?= arm-none-linux-gnueabi-

190ARCH ?= arm

保存退出开始编译

Sudo make

  AR      util-linux/volume_id/lib.a
  LINK    busybox_unstripped
 Trying libraries: crypt m
  Library crypt is not needed, excluding it
  Library m is needed, can't exclude it (yet)
  Final link with: m
  DOC     busybox.pod
  DOC     BusyBox.txt
  DOC     busybox.1
  DOC     BusyBox.html

编译结束安装到指定位置

Sudo make CONFIG_PREFIX=../rootfs install

--------------------------------------------------
You will probably need to make your busybox binary
setuid root to ensure all configured applets will
work properly.
--------------------------------------------------
安装过程完成,安装在上面新建的rootfs目录

打开安装好的rootfs目录

Sudo cd ../rootfs

创建设备文件

Sudo mkdir dev

Sudo cd dev/

sudo mknod console c 5 1

sudo mknod null c 1 3

构建配置文件inittabinittab为linux初始化文件系统时init初始化程序用到的配置文件。这个文件负责设置init初始化程序初始化脚本在哪里;每个运行级初始化时运行的命令; 开机、关机、重启对应的命令;各运行级登陆时所运行的命令。系统的第一个进程init会读取这个配置文件

这里是直接拷贝busybox

Sudo cp busybox-1.21.0/examples/bootfloppy/etc/ rootfs/ -r

Sudo vim etc/inittab

::sysinit:/etc/init.d/rcS

::askfirst:~/bin/sh

保存退出

::sysinit:/etc/init.d/rcS 告诉程序运行/etc/init.d/rcS脚本来初始化系统

配置fstab文件,这个文件是配置了系统在启动时挂载文件系统和存储设备它是决定一个硬盘(分区)被怎样使用或者说整合到整个系统中的唯一文件。

Sudo vim etc/fstab

proc /proc proc nosuid,noexec,nodev 0 0
sysfs /sys sysfs nosuid,noexec,nodev 0 0
devpts /dev/pts devpts gid=4,mode=620 0 0
tmpfs /tmp tmpfs defaults 0 0
devtmpfs /dev devtmpfs mode=0755,nosuid 0 0

/dev/mmcblk0p1 /boot vfat defaults 0 2
/dev/mmcblk0p2 / ext4 defaults,noatime 0 1

保存退出

安装glibc,在rootfs目录下,可以看到制作的几个根目录文件 sudo ls

bin  dev  etc  inittab  inuxrc  sbin  usr

sudo mkdir –p lib

打开交叉编译器的解压文件,拷贝系统运行所需要的库文件到自己制作的根文件系统里

Sudo cd /pcduino_file/arm-2009q3/arm-none-linux-gnueabi/libc/armv4t/lib

Sudo cp *.so* /pcduino_file/rootfs/rootfs/lib –d

Sudo  /pcduino_file/arm-2009q3/arm-none-linux-gnueabi/libc/armv4t/usr/lib/*.so* /pcduino_file/rootfs/rootfs/lib –d

这时候UBOOT, uImage, rootfs都已经制作好了,pcduino支持tf卡启动系统,下面要完成的工作就是把这些编译好的UBOOT二进制文件,uImagerootfs 部署到tf卡中,这样板卡在启动的时候,就可以按照约定读取UBOOT,启动内核,挂载文件系统了。

最近买了一个pcduino,看起来硬件配置不错,有1G的主频。官方发布了他们做的系统,用起来像个电脑,体验一般但是用来开发和实现创意想法,还是很不错的。图形化界面,里面还是装了很多驱动和应用,速度上有些慢。我打算将来移植QTOpencv,运行图像处理算法和这方面的验证性试验,这个做好的系统显得太冗余,我想做个最小的系统,以后需要什么驱动在往里面添加。顺便学学整个系统的构架,搞懂了发布最后的镜像文件。二来我觉得这样最精简的系统,跑图像处理算法会更快些。

网上也已经有网友发布了一系列文章,来讲解pcduino的移植,我也是更具这位网友的文章移植内核的,使用起来基本没有什么问题,但是有些细节我也不太明白。这文章就是解释这些细节,以及我遇到的一些问题。下面是这个网友的网站地址:

http://blog.csdn.net/u010216127/article/category/1387771

第一阶段编译UBOOT,Kernel,Rootfs

 开发环境:ubuntu12.04

 硬件:PCduino,Cortex_A8,主频1G

 编译器:arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

 UBOOT源码地址https://github.com/pcduino/kernel 

 交叉编译器地址http://code.google.com/p/smp-on-qemu/downloads/list 

 我用的各个源码都是pcduino光盘里面自带的,网上也有,可能版本或有不同,请结合其他文章参考。

1.1.1开发环境搭建

   解压交叉编译器

Sudo bunzip2 arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

Sudo tar xvf arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar

  添加编译器路径的环境变量

Sudo vim /etc/environment

PAHT里面添加“;/…./arm-2009q3/bin”我在这里写的是省略号,请根据自己的解压路径填写完整。

 

如果解压和环境变量填写完整使用如下命令可以验证

Sudo arm-none-linux-gnueabi-gcc –v

这个命令是显示gcc编译器的版本信息的,我的打印信息如下

gcc version 4.4.1 (Sourcery G++ Lite 2009q3-67)

 

如果没有显示请sudo source /etc/environment 确保环境变量被更新。至于64位系统还要安装一个库文件请参考网友的文章。

 

1.1.2编译UBOOT

解压UBOOT

Sudo unzip u-boot-sunxi-sunxi.zip

Sudo cd u-boot-sunxi-sunxi

Sudo make pcduino CROSS_COMPILE=arm-none-linux-gnueabi-

需要编译一段时间,编译顺利结束的话,会生成第一阶段/spl/sunxi-spl.bin 、第二阶段 /u-boot.bin

 

1.1.3编译内核源码

    解压内核源码,网上同样有,我用的内核源码是pcduino是光盘自带的,解压到自己定义的目录,并打开进入源码目录

Sudo  cd  /pcduino_file/kernel/kernel/linux-sunxi/linux-sunxi-sunxi-3.0

Sudo ls

Android.mk  CREDITS        fs       Kconfig      mm              REPORTING-BUGS  sound       vmlinux arch        crypto         include  kernel       modules         rootfs          System.map  vmlinux.o block      Documentation  init     lib Module.symvers  samples tools build.sh    drivers        ipc  MAINTAINERS  net scripts usr COPYING     firmware       Kbuild   Makefile     README          security        virt

设置配置文件

Sudo make ARCH=arm sun4i_defconfig

#
# configuration written to .config
#

进入图形化配置界面,注意终端界面尺寸要够大,否则进入不了配置界面。

Sudo make ARCH=arm menuconfig

HOSTCC  scripts/kconfig/lxdialog/checklist.o
  HOSTCC  scripts/kconfig/lxdialog/inputbox.o
  HOSTCC  scripts/kconfig/lxdialog/menubox.o
  HOSTCC  scripts/kconfig/lxdialog/textbox.o
  HOSTCC  scripts/kconfig/lxdialog/util.o
  HOSTCC  scripts/kconfig/lxdialog/yesno.o
  HOSTCC  scripts/kconfig/mconf.o
  HOSTLD  scripts/kconfig/mconf
  scripts/kconfig/mconf Kconfig

保存退出即可,若执行make menuconfig报错,需要安装屏幕绘制动态库,安装过程

Sudo apt-get install libncurses5

这里是调整一些内核配置,根据自己的要求修改。

编译内核源码

Sudo make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage

打印文字如下说明编译成功

  AS      arch/arm/boot/compressed/piggy.gzip.o
  LD      arch/arm/boot/compressed/vmlinux
  OBJCOPY arch/arm/boot/zImage
  Kernel: arch/arm/boot/zImage is ready
  UIMAGE  arch/arm/boot/uImage
 Image Name:   Linux-3.0.62
 Created:      Sat Apr 20 18:33:26 2013
 Image Type:   ARM Linux Kernel Image (uncompressed)
 Data Size:    4693068 Bytes = 4583.07 kB = 4.48 MB
 Load Address: 40008000
 Entry Point:  40008000
 Image arch/arm/boot/uImage is ready

arch/arm/boot/文件夹下生成内核文件,因为我没有添加其他驱动所以编译得到的内核很小才4.5MB左右,由此看来linux系统很是短小精干哪。这里我只是先把最小的系统搭起来,驱动的添加以后肯定还要修改。

1.1.4制作根文件系统

移植根文件系统首先需要安装busybox

获取源码在:http://www.busybox.net/  点击BusyBox 1.21.0下载源码,解压到工作目录并进入该目录

Sudo make menuconfig

先采取默认配置,不行在改回来在配置界面里面把builid option  Build BusyBox as astatic binary (no shared libs) 把这个选上

修改Makefile文件里面的编译器名字和平台名字

Sudo vim Makefile

修改:

164CROSS_COMPILE ?= arm-none-linux-gnueabi-

190ARCH ?= arm

保存退出开始编译

Sudo make

  AR      util-linux/volume_id/lib.a
  LINK    busybox_unstripped
 Trying libraries: crypt m
  Library crypt is not needed, excluding it
  Library m is needed, can't exclude it (yet)
  Final link with: m
  DOC     busybox.pod
  DOC     BusyBox.txt
  DOC     busybox.1
  DOC     BusyBox.html

编译结束安装到指定位置

Sudo make CONFIG_PREFIX=../rootfs install

--------------------------------------------------
You will probably need to make your busybox binary
setuid root to ensure all configured applets will
work properly.
--------------------------------------------------
安装过程完成,安装在上面新建的rootfs目录

打开安装好的rootfs目录

Sudo cd ../rootfs

创建设备文件

Sudo mkdir dev

Sudo cd dev/

sudo mknod console c 5 1

sudo mknod null c 1 3

构建配置文件inittabinittab为linux初始化文件系统时init初始化程序用到的配置文件。这个文件负责设置init初始化程序初始化脚本在哪里;每个运行级初始化时运行的命令; 开机、关机、重启对应的命令;各运行级登陆时所运行的命令。系统的第一个进程init会读取这个配置文件

这里是直接拷贝busybox

Sudo cp busybox-1.21.0/examples/bootfloppy/etc/ rootfs/ -r

Sudo vim etc/inittab

::sysinit:/etc/init.d/rcS

::askfirst:~/bin/sh

保存退出

::sysinit:/etc/init.d/rcS 告诉程序运行/etc/init.d/rcS脚本来初始化系统

配置fstab文件,这个文件是配置了系统在启动时挂载文件系统和存储设备它是决定一个硬盘(分区)被怎样使用或者说整合到整个系统中的唯一文件。

Sudo vim etc/fstab

proc /proc proc nosuid,noexec,nodev 0 0
sysfs /sys sysfs nosuid,noexec,nodev 0 0
devpts /dev/pts devpts gid=4,mode=620 0 0
tmpfs /tmp tmpfs defaults 0 0
devtmpfs /dev devtmpfs mode=0755,nosuid 0 0

/dev/mmcblk0p1 /boot vfat defaults 0 2
/dev/mmcblk0p2 / ext4 defaults,noatime 0 1

保存退出

安装glibc,在rootfs目录下,可以看到制作的几个根目录文件 sudo ls

bin  dev  etc  inittab  inuxrc  sbin  usr

sudo mkdir –p lib

打开交叉编译器的解压文件,拷贝系统运行所需要的库文件到自己制作的根文件系统里

Sudo cd /pcduino_file/arm-2009q3/arm-none-linux-gnueabi/libc/armv4t/lib

Sudo cp *.so* /pcduino_file/rootfs/rootfs/lib –d

Sudo  /pcduino_file/arm-2009q3/arm-none-linux-gnueabi/libc/armv4t/usr/lib/*.so* /pcduino_file/rootfs/rootfs/lib –d

这时候UBOOT, uImage, rootfs都已经制作好了,pcduino支持tf卡启动系统,下面要完成的工作就是把这些编译好的UBOOT二进制文件,uImagerootfs 部署到tf卡中,这样板卡在启动的时候,就可以按照约定读取UBOOT,启动内核,挂载文件系统了。

最近买了一个pcduino,看起来硬件配置不错,有1G的主频。官方发布了他们做的系统,用起来像个电脑,体验一般但是用来开发和实现创意想法,还是很不错的。图形化界面,里面还是装了很多驱动和应用,速度上有些慢。我打算将来移植QTOpencv,运行图像处理算法和这方面的验证性试验,这个做好的系统显得太冗余,我想做个最小的系统,以后需要什么驱动在往里面添加。顺便学学整个系统的构架,搞懂了发布最后的镜像文件。二来我觉得这样最精简的系统,跑图像处理算法会更快些。

网上也已经有网友发布了一系列文章,来讲解pcduino的移植,我也是更具这位网友的文章移植内核的,使用起来基本没有什么问题,但是有些细节我也不太明白。这文章就是解释这些细节,以及我遇到的一些问题。下面是这个网友的网站地址:

http://blog.csdn.net/u010216127/article/category/1387771

第一阶段编译UBOOT,Kernel,Rootfs

 开发环境:ubuntu12.04

 硬件:PCduino,Cortex_A8,主频1G

 编译器:arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

 UBOOT源码地址https://github.com/pcduino/kernel 

 交叉编译器地址http://code.google.com/p/smp-on-qemu/downloads/list 

 我用的各个源码都是pcduino光盘里面自带的,网上也有,可能版本或有不同,请结合其他文章参考。

1.1.1开发环境搭建

   解压交叉编译器

Sudo bunzip2 arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

Sudo tar xvf arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar

  添加编译器路径的环境变量

Sudo vim /etc/environment

PAHT里面添加“;/…./arm-2009q3/bin”我在这里写的是省略号,请根据自己的解压路径填写完整。

 

如果解压和环境变量填写完整使用如下命令可以验证

Sudo arm-none-linux-gnueabi-gcc –v

这个命令是显示gcc编译器的版本信息的,我的打印信息如下

gcc version 4.4.1 (Sourcery G++ Lite 2009q3-67)

 

如果没有显示请sudo source /etc/environment 确保环境变量被更新。至于64位系统还要安装一个库文件请参考网友的文章。

 

1.1.2编译UBOOT

解压UBOOT

Sudo unzip u-boot-sunxi-sunxi.zip

Sudo cd u-boot-sunxi-sunxi

Sudo make pcduino CROSS_COMPILE=arm-none-linux-gnueabi-

需要编译一段时间,编译顺利结束的话,会生成第一阶段/spl/sunxi-spl.bin 、第二阶段 /u-boot.bin

 

1.1.3编译内核源码

    解压内核源码,网上同样有,我用的内核源码是pcduino是光盘自带的,解压到自己定义的目录,并打开进入源码目录

Sudo  cd  /pcduino_file/kernel/kernel/linux-sunxi/linux-sunxi-sunxi-3.0

Sudo ls

Android.mk  CREDITS        fs       Kconfig      mm              REPORTING-BUGS  sound       vmlinux arch        crypto         include  kernel       modules         rootfs          System.map  vmlinux.o block      Documentation  init     lib Module.symvers  samples tools build.sh    drivers        ipc  MAINTAINERS  net scripts usr COPYING     firmware       Kbuild   Makefile     README          security        virt

设置配置文件

Sudo make ARCH=arm sun4i_defconfig

#
# configuration written to .config
#

进入图形化配置界面,注意终端界面尺寸要够大,否则进入不了配置界面。

Sudo make ARCH=arm menuconfig

HOSTCC  scripts/kconfig/lxdialog/checklist.o
  HOSTCC  scripts/kconfig/lxdialog/inputbox.o
  HOSTCC  scripts/kconfig/lxdialog/menubox.o
  HOSTCC  scripts/kconfig/lxdialog/textbox.o
  HOSTCC  scripts/kconfig/lxdialog/util.o
  HOSTCC  scripts/kconfig/lxdialog/yesno.o
  HOSTCC  scripts/kconfig/mconf.o
  HOSTLD  scripts/kconfig/mconf
  scripts/kconfig/mconf Kconfig

保存退出即可,若执行make menuconfig报错,需要安装屏幕绘制动态库,安装过程

Sudo apt-get install libncurses5

这里是调整一些内核配置,根据自己的要求修改。

编译内核源码

Sudo make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage

打印文字如下说明编译成功

  AS      arch/arm/boot/compressed/piggy.gzip.o
  LD      arch/arm/boot/compressed/vmlinux
  OBJCOPY arch/arm/boot/zImage
  Kernel: arch/arm/boot/zImage is ready
  UIMAGE  arch/arm/boot/uImage
 Image Name:   Linux-3.0.62
 Created:      Sat Apr 20 18:33:26 2013
 Image Type:   ARM Linux Kernel Image (uncompressed)
 Data Size:    4693068 Bytes = 4583.07 kB = 4.48 MB
 Load Address: 40008000
 Entry Point:  40008000
 Image arch/arm/boot/uImage is ready

arch/arm/boot/文件夹下生成内核文件,因为我没有添加其他驱动所以编译得到的内核很小才4.5MB左右,由此看来linux系统很是短小精干哪。这里我只是先把最小的系统搭起来,驱动的添加以后肯定还要修改。

1.1.4制作根文件系统

移植根文件系统首先需要安装busybox

获取源码在:http://www.busybox.net/  点击BusyBox 1.21.0下载源码,解压到工作目录并进入该目录

Sudo make menuconfig

先采取默认配置,不行在改回来在配置界面里面把builid option  Build BusyBox as astatic binary (no shared libs) 把这个选上

修改Makefile文件里面的编译器名字和平台名字

Sudo vim Makefile

修改:

164CROSS_COMPILE ?= arm-none-linux-gnueabi-

190ARCH ?= arm

保存退出开始编译

Sudo make

  AR      util-linux/volume_id/lib.a
  LINK    busybox_unstripped
 Trying libraries: crypt m
  Library crypt is not needed, excluding it
  Library m is needed, can't exclude it (yet)
  Final link with: m
  DOC     busybox.pod
  DOC     BusyBox.txt
  DOC     busybox.1
  DOC     BusyBox.html

编译结束安装到指定位置

Sudo make CONFIG_PREFIX=../rootfs install

--------------------------------------------------
You will probably need to make your busybox binary
setuid root to ensure all configured applets will
work properly.
--------------------------------------------------
安装过程完成,安装在上面新建的rootfs目录

打开安装好的rootfs目录

Sudo cd ../rootfs

创建设备文件

Sudo mkdir dev

Sudo cd dev/

sudo mknod console c 5 1

sudo mknod null c 1 3

构建配置文件inittabinittab为linux初始化文件系统时init初始化程序用到的配置文件。这个文件负责设置init初始化程序初始化脚本在哪里;每个运行级初始化时运行的命令; 开机、关机、重启对应的命令;各运行级登陆时所运行的命令。系统的第一个进程init会读取这个配置文件

这里是直接拷贝busybox

Sudo cp busybox-1.21.0/examples/bootfloppy/etc/ rootfs/ -r

Sudo vim etc/inittab

::sysinit:/etc/init.d/rcS

::askfirst:~/bin/sh

保存退出

::sysinit:/etc/init.d/rcS 告诉程序运行/etc/init.d/rcS脚本来初始化系统

配置fstab文件,这个文件是配置了系统在启动时挂载文件系统和存储设备它是决定一个硬盘(分区)被怎样使用或者说整合到整个系统中的唯一文件。

Sudo vim etc/fstab

proc /proc proc nosuid,noexec,nodev 0 0
sysfs /sys sysfs nosuid,noexec,nodev 0 0
devpts /dev/pts devpts gid=4,mode=620 0 0
tmpfs /tmp tmpfs defaults 0 0
devtmpfs /dev devtmpfs mode=0755,nosuid 0 0

/dev/mmcblk0p1 /boot vfat defaults 0 2
/dev/mmcblk0p2 / ext4 defaults,noatime 0 1

保存退出

安装glibc,在rootfs目录下,可以看到制作的几个根目录文件 sudo ls

bin  dev  etc  inittab  inuxrc  sbin  usr

sudo mkdir –p lib

打开交叉编译器的解压文件,拷贝系统运行所需要的库文件到自己制作的根文件系统里

Sudo cd /pcduino_file/arm-2009q3/arm-none-linux-gnueabi/libc/armv4t/lib

Sudo cp *.so* /pcduino_file/rootfs/rootfs/lib –d

Sudo  /pcduino_file/arm-2009q3/arm-none-linux-gnueabi/libc/armv4t/usr/lib/*.so* /pcduino_file/rootfs/rootfs/lib –d

这时候UBOOT, uImage, rootfs都已经制作好了,pcduino支持tf卡启动系统,下面要完成的工作就是把这些编译好的UBOOT二进制文件,uImagerootfs 部署到tf卡中,这样板卡在启动的时候,就可以按照约定读取UBOOT,启动内核,挂载文件系统了。最近买了一个pcduino,看起来硬件配置不错,有1G的主频。官方发布了他们做的系统,用起来像个电脑,体验一般但是用来开发和实现创意想法,还是很不错的。图形化界面,里面还是装了很多驱动和应用,速度上有些慢。我打算将来移植QTOpencv,运行图像处理算法和这方面的验证性试验,这个做好的系统显得太冗余,我想做个最小的系统,以后需要什么驱动在往里面添加。顺便学学整个系统的构架,搞懂了发布最后的镜像文件。二来我觉得这样最精简的系统,跑图像处理算法会更快些。

网上也已经有网友发布了一系列文章,来讲解pcduino的移植,我也是更具这位网友的文章移植内核的,使用起来基本没有什么问题,但是有些细节我也不太明白。这文章就是解释这些细节,以及我遇到的一些问题。下面是这个网友的网站地址:

http://blog.csdn.net/u010216127/article/category/1387771

第一阶段编译UBOOT,Kernel,Rootfs

 开发环境:ubuntu12.04

 硬件:PCduino,Cortex_A8,主频1G

 编译器:arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

 UBOOT源码地址https://github.com/pcduino/kernel 

 交叉编译器地址http://code.google.com/p/smp-on-qemu/downloads/list 

 我用的各个源码都是pcduino光盘里面自带的,网上也有,可能版本或有不同,请结合其他文章参考。

1.1.1开发环境搭建

   解压交叉编译器

Sudo bunzip2 arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

Sudo tar xvf arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar

  添加编译器路径的环境变量

Sudo vim /etc/environment

PAHT里面添加“;/…./arm-2009q3/bin”我在这里写的是省略号,请根据自己的解压路径填写完整。

 

如果解压和环境变量填写完整使用如下命令可以验证

Sudo arm-none-linux-gnueabi-gcc –v

这个命令是显示gcc编译器的版本信息的,我的打印信息如下

gcc version 4.4.1 (Sourcery G++ Lite 2009q3-67)

 

如果没有显示请sudo source /etc/environment 确保环境变量被更新。至于64位系统还要安装一个库文件请参考网友的文章。

 

1.1.2编译UBOOT

解压UBOOT

Sudo unzip u-boot-sunxi-sunxi.zip

Sudo cd u-boot-sunxi-sunxi

Sudo make pcduino CROSS_COMPILE=arm-none-linux-gnueabi-

需要编译一段时间,编译顺利结束的话,会生成第一阶段/spl/sunxi-spl.bin 、第二阶段 /u-boot.bin

 

1.1.3编译内核源码

    解压内核源码,网上同样有,我用的内核源码是pcduino是光盘自带的,解压到自己定义的目录,并打开进入源码目录

Sudo  cd  /pcduino_file/kernel/kernel/linux-sunxi/linux-sunxi-sunxi-3.0

Sudo ls

Android.mk  CREDITS        fs       Kconfig      mm              REPORTING-BUGS  sound       vmlinux arch        crypto         include  kernel       modules         rootfs          System.map  vmlinux.o block      Documentation  init     lib Module.symvers  samples tools build.sh    drivers        ipc  MAINTAINERS  net scripts usr COPYING     firmware       Kbuild   Makefile     README          security        virt

设置配置文件

Sudo make ARCH=arm sun4i_defconfig

#
# configuration written to .config
#

进入图形化配置界面,注意终端界面尺寸要够大,否则进入不了配置界面。

Sudo make ARCH=arm menuconfig

HOSTCC  scripts/kconfig/lxdialog/checklist.o
  HOSTCC  scripts/kconfig/lxdialog/inputbox.o
  HOSTCC  scripts/kconfig/lxdialog/menubox.o
  HOSTCC  scripts/kconfig/lxdialog/textbox.o
  HOSTCC  scripts/kconfig/lxdialog/util.o
  HOSTCC  scripts/kconfig/lxdialog/yesno.o
  HOSTCC  scripts/kconfig/mconf.o
  HOSTLD  scripts/kconfig/mconf
  scripts/kconfig/mconf Kconfig

保存退出即可,若执行make menuconfig报错,需要安装屏幕绘制动态库,安装过程

Sudo apt-get install libncurses5

这里是调整一些内核配置,根据自己的要求修改。

编译内核源码

Sudo make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage

打印文字如下说明编译成功

  AS      arch/arm/boot/compressed/piggy.gzip.o
  LD      arch/arm/boot/compressed/vmlinux
  OBJCOPY arch/arm/boot/zImage
  Kernel: arch/arm/boot/zImage is ready
  UIMAGE  arch/arm/boot/uImage
 Image Name:   Linux-3.0.62
 Created:      Sat Apr 20 18:33:26 2013
 Image Type:   ARM Linux Kernel Image (uncompressed)
 Data Size:    4693068 Bytes = 4583.07 kB = 4.48 MB
 Load Address: 40008000
 Entry Point:  40008000
 Image arch/arm/boot/uImage is ready

arch/arm/boot/文件夹下生成内核文件,因为我没有添加其他驱动所以编译得到的内核很小才4.5MB左右,由此看来linux系统很是短小精干哪。这里我只是先把最小的系统搭起来,驱动的添加以后肯定还要修改。

1.1.4制作根文件系统

移植根文件系统首先需要安装busybox

获取源码在:http://www.busybox.net/  点击BusyBox 1.21.0下载源码,解压到工作目录并进入该目录

Sudo make menuconfig

先采取默认配置,不行在改回来在配置界面里面把builid option  Build BusyBox as astatic binary (no shared libs) 把这个选上

修改Makefile文件里面的编译器名字和平台名字

Sudo vim Makefile

修改:

164CROSS_COMPILE ?= arm-none-linux-gnueabi-

190ARCH ?= arm

保存退出开始编译

Sudo make

  AR      util-linux/volume_id/lib.a
  LINK    busybox_unstripped
 Trying libraries: crypt m
  Library crypt is not needed, excluding it
  Library m is needed, can't exclude it (yet)
  Final link with: m
  DOC     busybox.pod
  DOC     BusyBox.txt
  DOC     busybox.1
  DOC     BusyBox.html

编译结束安装到指定位置

Sudo make CONFIG_PREFIX=../rootfs install

--------------------------------------------------
You will probably need to make your busybox binary
setuid root to ensure all configured applets will
work properly.
--------------------------------------------------
安装过程完成,安装在上面新建的rootfs目录

打开安装好的rootfs目录

Sudo cd ../rootfs

创建设备文件

Sudo mkdir dev

Sudo cd dev/

sudo mknod console c 5 1

sudo mknod null c 1 3

构建配置文件inittabinittab为linux初始化文件系统时init初始化程序用到的配置文件。这个文件负责设置init初始化程序初始化脚本在哪里;每个运行级初始化时运行的命令; 开机、关机、重启对应的命令;各运行级登陆时所运行的命令。系统的第一个进程init会读取这个配置文件

这里是直接拷贝busybox

Sudo cp busybox-1.21.0/examples/bootfloppy/etc/ rootfs/ -r

Sudo vim etc/inittab

::sysinit:/etc/init.d/rcS

::askfirst:~/bin/sh

保存退出

::sysinit:/etc/init.d/rcS 告诉程序运行/etc/init.d/rcS脚本来初始化系统

配置fstab文件,这个文件是配置了系统在启动时挂载文件系统和存储设备它是决定一个硬盘(分区)被怎样使用或者说整合到整个系统中的唯一文件。

Sudo vim etc/fstab

proc /proc proc nosuid,noexec,nodev 0 0
sysfs /sys sysfs nosuid,noexec,nodev 0 0
devpts /dev/pts devpts gid=4,mode=620 0 0
tmpfs /tmp tmpfs defaults 0 0
devtmpfs /dev devtmpfs mode=0755,nosuid 0 0

/dev/mmcblk0p1 /boot vfat defaults 0 2
/dev/mmcblk0p2 / ext4 defaults,noatime 0 1

保存退出

安装glibc,在rootfs目录下,可以看到制作的几个根目录文件 sudo ls

bin  dev  etc  inittab  inuxrc  sbin  usr

sudo mkdir –p lib

打开交叉编译器的解压文件,拷贝系统运行所需要的库文件到自己制作的根文件系统里

Sudo cd /pcduino_file/arm-2009q3/arm-none-linux-gnueabi/libc/armv4t/lib

Sudo cp *.so* /pcduino_file/rootfs/rootfs/lib –d

Sudo  /pcduino_file/arm-2009q3/arm-none-linux-gnueabi/libc/armv4t/usr/lib/*.so* /pcduino_file/rootfs/rootfs/lib –d

这时候UBOOT, uImage, rootfs都已经制作好了,pcduino支持tf卡启动系统,下面要完成的工作就是把这些编译好的UBOOT二进制文件,uImagerootfs 部署到tf卡中,这样板卡在启动的时候,就可以按照约定读取UBOOT,启动内核,挂载文件系统了。

第二阶段部署UBOOT,uImage,rootfsTF卡中

准备一张TF卡,最好是金士顿的TF卡,我一开始用的不是金士顿的卡,总是部署失败,后来我换了一张32G的金士顿TF卡,成功部署!像一般的金士顿1G2G卡也没应该有问题。

1.2.1烧写UBOOTTF

插入TF卡,ubuntu12.04会识别。在驱动文件下可以看到/dev/sdc,文件。有些会识别成/dev/sdb,根据自己的系统把TF卡识别成说明文件名而定。我的是识别成/dev/sdc文件。在部署之前最好把TF卡格式化了,确保里面没有其他数据。

清空TF卡,包括分区表

Sudo dd if=/dev/zero of=/dev/sdc bs=1M count=1 //意思是用0填充sdc的前1M的空间,注意这个命令也可以用来测试磁盘的读写速度。

查看TF卡是否忙碌sudo sfdisk -R /dev/sdc

BLKRRPART: Device or resource busy
This disk is currently in use.

如果出现这个打印语句说明TF已经被挂载,重新插拔一次即可。

磁盘分区:

sudo cat <<EOT | sudo sfdisk --in-order -uM /dev/sdc

回车输入

> 1,16,c
> ,,L
> EOT

这里的116c表示的是从这第一个主分区(sdc)的第1-16M之间的文件系统类型为FAT32,这个cFAT32的类型代码。而下面一行的就表示默认了两个值的大小和这么大(这个主分区1-16M后面的空间)的剩余空间的文件系统类型为LINUX.

root@ubuntu:/# sfdisk -l /dev/sdc   //查看一下分区是否成功

 

Disk /dev/sdc: 30436 cylinders, 64 heads, 32 sectors/track

Units = cylinders of 1048576 bytes, blocks of 1024 bytes, counting from 0

 

  Device Boot Start     End   #cyls   #blocks   Id  System

/dev/sdc1         1      16      16     16384    c  W95 FAT32 (LBA)

/dev/sdc2        17   30435   30419  31149056   83  Linux

/dev/sdc3         0       -       0         0    0  Empty

/dev/sdc4         0       -       0         0    0  Empty

这是我为TF卡分好的区可以清楚的看到1-16M的空间文件系统类型为FAT32,其余的空间文件系统类型为linux

磁盘格式化:

sudo sfdisk -l /dev/sdc //先看看分好不同区磁盘的名字,我的分别是sdc1,sdc2

重新分好区之后为了使dev设备文件可以识别,最好重新插拔TF卡,在dev下可以看到sdc1,sdc2这两个问件,否则在磁盘格式化的时候会提示找不到磁盘。

sudo mkfs.vfat /dev/sdc1   //16Msdc1磁盘格式化为vfat格式,也就是我们经常看见的FAT32格式。

 

sudo mkfs.ext4 /dev/sdc2  //16M以后的空间格式化为ext4格式

TF卡烧写UBOOT.bin文件

先打开uboot文件夹

sudo dd if=spl/sunxi-spl.bin of=/dev/sdc bs=1024 seek=8

sudo dd if=u-boot.bin of=/dev/sdc bs=1024 seek=32

通过A10相关资料,通过以上2条命令烧写spluboot到指定位置,暂时不清楚如何确定这2个读取位置.

1.2.2烧写linux内核

制作对对A10芯片进行配置的二进制文件script.bin

打开内核源码的文件夹,然后打开源码够工具文件夹

Sudo cd ../linux-sunxi-sunxi-3.0

Sudo cd ../sunxi-tools-master/       //这个文件夹就在内核源码里面单词里面有tools

Sudo make

make出现如下错误:

Package libusb-1.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `libusb-1.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libusb-1.0' found
Package libusb-1.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `libusb-1.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libusb-1.0' found

但还是在sunxi-tools-master目录下生成了fex2bin。这个错误还没解决,打算先用生成的fex2bin试试(fex2bin文件,能把 *.fex文件生成 *.bin文件

解决方法:

pkg-config 是一个提供从源代码中编译软件时查询已安装的库时使用的统一接口的计算机软件。可以解决明明在自己机器上编译好好的,在别人电脑上编译就不行问题。当安装一个库时(从RPMdeb或其他二进制包管理系统),会包括一个后缀名为pc的文件,它会同其他.pc文件一起放入一个文件夹(依赖与你的系统设置)。在这个文件里包含有数个条目。这些条目通常包含用于其他使用这个库的程序编译时需要的库设置,以及头文件的位置,版本信息和一个简介。

sudo apt-get install libusb-1.0-0-dev  //安装这个软件

sudo find -name "libusb-1.0.pc" //查找这个软件的安装位置

./usr/lib/i386-linux-gnu/pkgconfig/libusb-1.0.pc //这是我的机器的位置

Sudo export PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu /pkgconfig:$PKG_CONFIG_PATH

Sudo set | grep PKG_CONFIG //显示本地的环境变量

PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig //环境变量设置成功

Sudo pkg-config libusb-1.0 --cflags –libs

Sudo make

利用上面生成的工具fex2bin,sunxi-boards/sys_config/a10/pcduino.fex文件生成对A10芯片进行配置的二进制文件script.bin

sunxi-tools文件夹下找到fex2bin可执行文件

Sudo ./fex2bin ../sunxi-boards/sys_config/a10/pcduino.fex script.bin //其根据自己的目录找对应的文件

sudo mount /dev/sdc1 /mnt                   

Sudo cd /mnt

Sudo mkdir root //mnt目录下创建root目录

打开内核源码目录                

Sudo cp arch/arm/boot/uImage /mnt/root/ //烧写内核到sdc1

打开sunxi-tools文件夹

Sudo cp script.bin /mnt/boot   //找到脚本文件写入dsc1分区

 

配置启动参数文件

A10UBOOT读取启动参数流程如下生成过程boot.cmd——>boot.src——>uEnv.txt

制作boot.cmd

Sudo vim boot.cmd

setenv bootargs console=ttyS0,115200 noinitrd root=/dev/mmcblk0p2 init=/sbin/init rootwait

panic=10 ${extra}
fatload mmc 0 0x43000000 boot/script.bin
fatload mmc 0 0x48000000 boot/uImage
bootm 0x48000000

制作boot.scr

Sudo mkimage -C none -A arm -T script -d boot.cmd boot.scr

制作uEnv.txt

Sudo vim uEnv.txt

bootenv=boot.scr
loaduimage=fatload mmc ${mmcdev} ${loadaddr} ${bootenv}
mmcboot=echo Running boot.scr script from mmc ...; source ${loadaddr}

配置文件写入sdc1分区

Sudo cp boot.scr /mnt/

Sudo cp uEnv.txt /mnt/

卸载sdc1分区至此ubootuimage,启动文件烧写完毕,后面是根文件系统的烧写

Sudo umount /mnt

 

1.2.3TF卡烧写根文件系统  

sudo mount /dev/sdc2 /mnt/  //挂载TF卡的sdc2分区到/mnt

打开制作好的rootfs目录

sudo cp -pR rootfs/*  /mnt/  //把整个目录拷贝到sdc2分区

sudo umount /dev/sdc2   //卸载分区

 

在全部烧写完成之后,插入TFubuntu12.04可以识别为两个盘,一个盘里面是有boot文件夹和boot.scr文件,uEnv.txt文件。其中boot文件夹里面装着script.binuImage文件。另一个盘里面可以看到是文件系统的那些文件。至此系统部署成功了。

拔下TF卡,插入pcduino至此UBOOT,启动配置文件,内核,文件系统都烧写完毕。系统上电,顺利的化,整个最小系统就启动配置成功了,可以进一步的驱动开发了。如果要修改UBOOT,内核,重新编译烧写就可以了。正常的化系统可以进入串口终端了。

/ # ls
bin         home        lost+found  run         tmp
dev         lib         mnt         sbin        usr
etc         linuxrc     proc        sys         var
/ # 


0 0
原创粉丝点击