菜鸟的cubieboard之旅(二)-SD卡镜像制作

参考了http://mer.jolladev.net/wiki.php?id=%E5%90%AF%E5%8A%A8cubieboard2%E5%88%B0linux_kernel和tll大神的How to make a cubieboard system文档

第一步:下载kernel代码并编译

    git clone git://github.com/linux-sunxi/linux-sunxi

配置并编译:

    Gerneral setup ->Cross Compilter too prefix 这里填arm-linux-gnueabihf-

    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- cubieboard2_defconfig

    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 uImage modules

    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf--j4 INSTALL_MOD_PATH=output modules_install

    如果成功,在/arch/arm/boot/目录下会有uImage,在output下会有lib目录

第二步:下载uboot代码并编译

    git clone git://github.com/linux-sunxi/u-boot-sunxi.git

    make distclean CROSS_COMPILE=arm-linux-gnueabihf-

    make Cubieboard2 CROSS_COMPILE=arm-linux-gnueabihf-

    如果成功,会在主目录下有u-boot.bin,在spl目录有u-boot-spl.bin

第三步:生成boot.scr

boot.scr是什么?

    根据资料描述(https://github.com/linux-sunxi/u-boot-sunxi/wiki#bootscr-support),u-boot在启动的时候会在第一个分区(FAT/extX格式)寻找/boot.scr或者/boot/boot.scr文件,boot.scr中可以包含用于载入script.bin,kernel,initrd(可选)以及设置内核启动参数的uboot命令。

boot.cmd如何生成?

    在$WORK_DIR目录新建 boot.cmd 文件,添加以下内容:

    setenv bootargs console=ttyS0,115200 noinitrd disp.screen0_output_mode=EDID:1280x1024p60 init=/init root=/dev/mmcblk0p2 rootfstype=ext4 rootwait panic=10 ${extra}

    fatload mmc 0 0x43000000 boot/script.bin

    fatload mmc 0 0x48000000 boot/uImage

    bootm 0x48000000

生成boot.scr:

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

第四步:生成script.bin

   git clone git://github.com/linux-sunxi/sunxi-tools.git,这个下载的是生成上次script所需要的工具

   git clone git://github.com/linux-sunxi/sunxi-boards.git这个是板子对应的资源列表

编译工具:

    cd $WORK_DIR/sunxi-toolsmake

产生script.bin

    cd $WORK_DIR/sunxi-boards/sys_config/a20

    $WORK_DIR/sunxi-tools/fex2bin cubieboard2.fex script.bin

 

这样就把制作需要的东西都准备好了,接下来就是把刚才这些拷贝到tf卡中

A20 芯片上电启动的时候,会读取SD卡最前面的 1M 内容,从而得到 bootloader,所以我们需要把 u-boot 写到SD卡的前1M区间。

其中详细的SD卡布局如下:

起始 大小 用途
0 8KB 存放分区表等内容
8 24KB SPL loader
32 512KB u-boot
544 128KB environment
672 352KB 保留
1024 - 用于剩余分区

可以看到,应该把刚uboot编译产生的u-boot-spl.bin 这个文件拷贝到8k这个位置,把u-boot.bin 放到32k这个位置

话说要先给tf卡分区

具体分区步骤如下:

建立第一个分区

root@kubuntu:~/src/u-boot-sunxi# fdisk ${card}
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x911332e8.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n                                   #键入n然后回车
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p):                                       #直接回车
Using default response p
Partition number (1-4, default 1):                        #直接回车
Using default value 1
First sector (2048-15278079, default 2048):               #直接回车
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-15278079, default 15278079): +64M         #键入+64M后回车,即分区大小为64M

建立第二个分区

Command (m for help): n                                   #键入n然后回车
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p):                                       #直接回车
Using default response p
Partition number (1-4, default 2):                        #直接回车 
Using default value 2
First sector (133120-15278079, default 133120):           #直接回车
Using default value 133120
Last sector, +sectors or +size{K,M,G} (133120-15278079, default 15278079):      #直接回车,即第二个分区使用全部剩余空间
Using default value 15278079

接下来指定分区类型:

Command (m for help): t                                   #键入t然后回车
Partition number (1-4): 1                                 #键入1然后回车,即指定第一个分区
Hex code (type L to list codes): c                        #键入c然后回车,即指定第一个分区为vfat
Changed system type of partition 1 to c (W95 FAT32 (LBA))

Command (m for help): w                                   #键入w然后回车,保存分区表
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

格式化分区:

mkfs.vfat ${card}1
mkfs.ext4 ${card}2                

然后写入bootloader:

cd $WORK_DIR/u-boot-sunxi
dd if=u-boot-sunxi-with-spl.bin of=$card bs=1024 seek=8

最后安装内核 uImage,设置启动参数:

mount ${card}1 /mnt
mkdir /mnt/boot
cp $WORK_DIR/linux-sunxi/arch/arm/boot/uImage /mnt/boot
cp $WORK_DIR/sunxi-boards/sys_config/a20/script.bin /mnt/boot
cp $WORK_DIR/boot.scr /mnt/
sync && umount /mnt

 

制作文件系统

    wget http://busybox.net/downloads/busybox-1.21.1.tar.bz2

   tar -jxvf busybox-1.21.1.tar.bz2

   cd busybox-1.21.1

   make menuconfig ARCH=arm

这边设置一下:busybox settings->build option->Cross Compiler prefix  arm-linux-gnueabihf-

   make

   make install

 

将文件系统拷贝到tf第二分区 

     mount /dev/sdb2 /mnt

     cp -r _instll/* /mnt

     cp -r examples/bootfloppy/etc /mnt

     cd /mnt

     mkdir dev proc sys var home tmp mnt run boot boot2 dev/pts

删除fstab,并重新编辑

     rm etc/fstab;

     nano etc/fstab;

     chmod 777 etc/fstab;

编辑

    proc /proc proc nosuid,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 /boot2/ vfat defaults 0 2

    /dev/mmcblk0p2 / ext4 defaults,notime 0 2 

你可能感兴趣的:(内核,sd,cubieboard2,kerne)