玩转BeagleBoard xM——建立虚拟机开发环境和嵌入式Linux系统

在Beagleboard xM(简称bb)上建立能运行Linux系统,包括了创建启动用的TF卡,编译生成bootloader(MLO和u-boot.bin),编译生成内核镜像文件(uImage或zImage文件),创建rootfs(Linux根文件系统)等工作。这些工作需要在一台配置ARM交叉编译环境的Linux系统上完成。

下面分步完成整个系统的建立过程,直至Linux系统在bb上boot起来,进入shell命令行。


STEP 1:建立ARM嵌入式开发环境

利用ARM交叉编译环境,可以x86系统上,编译ARM处理器上可执行的目标代码。主要用于编译bb上的bootloader、内核镜像,以及其它ARM可执行程序。

具体步骤:

(1)在VMware上创建一个虚拟机,安装发行版的ubunt​u系统,用于建立ARM嵌入式开发环境。

(2)安装arm-linux-gcc,建立ARM交叉编译环境(需要root权限)

    1、下载arm-linux-gcc-4.3.2.tgz压缩包

    2、tar -xzvf arm-linux-gcc-4.3.2.tgz,自动解压至/user/local/arm/目录下。ARM交叉编译器的所有可执行程序在/usr/local/arm/4.3.2/bin/目录下。

    3、配置root用户环境变量,修改/etc/bash.bashrc文件

                 #vi /etc/bash.bashrc
                 在最后加上export PATH=$PATH:/usr/local/arm/4.3.2/bin

    4、测试arm-linux-gcc -v,会执行编译器,正常显示版本信息表示已安装配置成功


STEP 2:创建bootloader和boot.scr

TI OMAP系列处理器上的bootloader专指x-loader(MLO)和u-boot(u-boot.bin),两者用于完成Linux内核启动前的配置部分硬件系统配置,解压加载内核Image文件并引导内核启动。u-boot在执行过程中会读取boot.scr文件中的内核启动参数,传给即将引导启动的Linux内核。

具体步骤:

(1)bootloader下载和编译

    1、执行git clone git://git.denx.de/u-boot.git target_directory,从DENX官方下载最新的u-boot至target_directory目录。

    2、编译u-boot,生成MLO文件和u-boot.bin文件

        打开Makefile文件,修改CROSS_COMPILE ?= arm-linux-

        依次执行

            make mrproper   //清除以往的配置信息

            make omap3_beagle_config  //针对bb进行编译配置

            make //编译生成MLO和u-boot.bin文件

        完成后,在u-boot根目录下生成MLO文件和u-boot.bin文件

(2)创建boot.scr

    1、执行apt-get install mkimage,安装mkimage工具

    2、vi创建bootcmd文件,加入以下启动参数

        setenv bootcmd 'fatload mmc 0:1 0x80200000 uImage; bootm 0x80200000'

        set bootargs 'console=ttyO2,115200n8 mem=80M@0x80000000 root=/dev/mmcblk0p2 rootfstype=ext3 rw rootwait omapfb.video_mode=1280x720MR-16@60'

        boot

        其中,主要的一些参数,如,fatload mmc...命令从TF卡的FAT32分区读取uImage文件,加载到主存的0x80200000地址,然后通过bootm命令,从该地址启动。bootarg为传递给LinuxKernel的内核启动参数。由于我通过串口接到Tutty上输出,因此,设置console=ttyO2,115200n8,rootfs在/dev/mmcblkOp2设备中,文件系统类型为ext3。

    3、执行mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n "Beagleboard boot script" -d bootcmd boot.scr命令,生成boot.scr文件


STEP 3:创建Linux内核镜像uImage

Linux发行版已融入对OMAP处理器和bb的支持,因此,可以直接下载最新的Linux发行版内核源码,自己编译生成内核镜像。

具体步骤:

(1)从www.kernel.org下载最新的Linux发行版源码

    下载最新的3.5版内核源码至omap_linux目录下

    git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git omap_linux

(2)编译生成uImage文件

    1、修改Makefile文件中以下两行

        ARCH            ?= arm

        CROSS_COMPILE   ?= arm-linux-

    2、编译生成uImage

        执行make mrproper,清除编译环境中残留的配置

        执行make omap2plus_defconfig,进行配置。  omap2plus_defconfig是bb对应的defconfig文件

        执行make menuconfig或make xconfig,根据用户需求增加一些特定的功能配置

        最后,执行make uImage,编译生成uImage文件 

   3、编译生成内核模块

        内核启动过程中,在挂载文件系统后,需要加载系统所需的内核模块,这些模块通过内核源码编译生成,具体过程如下:

        执行make modules,编译所需的内核模块

        执行make INSTALL_MOD_PATH=rootfs路径 modules_install,安装内核模块至rootfs所在路径下

        注意,缺少与内核版本对应的内核模块,将导致Linux启动出错。


STEP 4:建立Linux rootfs

rootfs的也是系统非常重要的一部分。Linux内核启动后,必须挂载rootfs,然后从rootfs中加载其它所需的内核模块,启动各种系统服务。rootfs有问题的话,启动过程会出现各种诡异的错误。在尝试了多个rootfs并失败后,最后在一个ARM Fedora 12的rootfs上成功完成了整个启动过程。下面是基于该rootfs的建立过程:

    1、下载ARM Fedora 12 rootfs

        下载地址:http://ftp.arm.linux.org.uk/pub/armlinux/fedora/rootfs/ 

        下载其中的rootfs-f12.tar.bz2压缩包,分两步解压

            bzip2 -d rootfs-f12.tar.bz2

            tar xvf rootfs-f12.tar,解压至rootfs-f12目录下

    2、安装已编译好的内核模块

        STEP 3编译生成了内核模块后,执行安装,rootfs路径设置为rootfs-f12的绝对路径(假设在/root下)

        执行make INSTALL_MOD_PATH=/root/rootfs-f12 modules_install

    3、配置root免口令登录

        系统的Login工具使用了以下3个配置文件:/etc/group、/etc/passwd和/etc/hosts,分别修改如下:

        [root@localhost etc]# vi group

            root:x:0:root

        [root@localhost etc]# vi passwd

            root::0:0:root:/root:/bin/bash

         [root@localhost etc]# vi hosts

            127.0.0.1       localhost

    4、配置串口终端

配置的目的是使shell命令行提示符通过ttyO2串口终端设备输出。该rootfs中默认未进行配置,需要手工添加,否则在启动完rc.local服务后,屏幕将无任何后续输出,出现挂死的假象。具体配置过程如下:

    vi /etc/securetty,添加一行ttyO2

    vi /etc/event.d/ttyO2,创建ttyO2文件,添加如下内容:

            start on stopped rc1
            start on stopped rc2
            start on stopped rc3
            start on stopped rc4
            start on stopped rc5

            stop on shutdown

            respawn
            exec /sbin/agetty -L ttyO2 115200 vt100


STEP 5:建立启动用的TF卡

bb可以通过多种方式启动Linux系统,如通过Nandflash、TF卡或者通过NFS网络启动。本人选择采用TF卡启动的方式。因此,需要准备一张空白TF卡,在其之上建立双分区:一个FAT32分区和一个EXT3(或EXT4)分区。FAT32分区用于存放bootloader、Image文件和一些boot参数相关的文件。EXT3分区用于存放Linux的Root filesystem。

具体步骤如下:

    1、TF卡分区

        将TF通过读卡器连接到Linux开发环境上,找到挂载的设备,如本人系统上挂载为/dev/sdb。按照http://code.google.com/p/beagleboard/wiki/LinuxBootDiskFormat 教程完成分区。

        完成分区后,重新挂载TF卡。在/media下可以看到FAT32和EXT3两个分区目录。

    2、复制bootloader和uImage至FAT32分区

         注意,MLO必须存放在FAT32分区的第一个扇区,因此,首先第一步就是把MLO文件拷贝到FAT32分区中。然后,再将u-boot.bin、boot.scr、uImage文件都一股脑拷到FAT32分区即可。

    3、复制rootfs至EXT3分区

        将rootfs-f12下的所有目录都复制到EXT3分区中。


STEP 6:在bb上启动Linux系统

具体步骤:

    1、配置Putty串口终端    

    在加电启动bb前,将bb的串口连接到PC上。在设备管理器中找到新的串口设备,确定其工作的端口,比如COM1。

    从http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe下载putty程序,启动Putty。​

    如下配置putty:

玩转BeagleBoard xM——建立虚拟机开发环境和嵌入式Linux系统_第1张图片

完成后,点击Open按钮,打开终端。

    2、启动bb

将制作完成的TF卡插入到bb上,然后加电启动,启动过程中的所有输出会输出到串口终端上,直至提示输入用户名和密码。输入root并回车,进入shell,至此bb上的嵌入式Linux系统就算成功完成了。



你可能感兴趣的:(玩转BeagleBoard xM——建立虚拟机开发环境和嵌入式Linux系统)