Pcduino下linux的Uboot Kernel Roofs制作烧写(一)

最近买了一个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

构建配置文件inittabinittablinux初始化文件系统时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,启动内核,挂载文件系统了。

你可能感兴趣的:(linux,kernel,uboot,交叉编译)