zoukankan      html  css  js  c++  java
  • Linux SD启动

    参考:http://blog.163.com/yi_yixinyiyi/blog/static/1362868892011613211689/

    1.制作SD卡分区

    一个没有分区的SD卡插入到电脑,在ubuntu10.04下默认的设备节点是/dev/sdb。

    打开终端,然后根据提示输入以下命令:

    我已是root用户直接输入fdisk /dev/sdb  回车(不用加sudo)

    这时我们可以看到系统里的分区有情况:
    系统的盘符是/dev/sdb 其下分为二个区 /dev/sdb1  /dev/sdb2

    现在我们重新对SD卡进行分区。
    首先我们看一下Fdisk命令
    指令:fdisk
    用途:观察硬盘之实体使用情形与分割硬盘用。
    1. 输入 m 显示所有命令列示。
    2. 输入 p 显示硬盘分割情形。
    3. 输入 a 设定硬盘启动区。
    4. 输入 n 设定新的硬盘分割区。
       1> 输入 e 硬盘为[延伸]分割区(extend)。
       2> 输入 p 硬盘为[主要]分割区(primary)。
    5. 输入 t 改变硬盘分割区属性。
    6. 输入 d 删除硬盘分割区属性。
    7. 输入 q 结束不保存。
    8. 输入 w 结束并保存。

    下面开始时具体的分区步骤:
    ==========================================
    输入/sbin/fdisk /dev/sdb 回车
    Command (m for help):

    ==========================================
    我的SD卡两个分区,所以要删除2次,过程如下:

    Command (m for help): d   回车 删除硬盘分割区
    Partition number (1-N): 1  回车 删除1分区,

    Command (m for help): d   回车
    Partition number (1-N): 2 回车  删除2分区

    根据你的SD卡里有几个区 就一一删除分区。
    ==========================================
    Command (m for help): P 回车
     
    看下图  已经没有分区了 
    ==========================================
    现在我们重新建立分区,这里 我要把8G的SD卡建分成二个分区 ,步骤如下:

    第一个是FAT32的分区(分70M)
    Command (m for help): n  回车
       e extended
       p primary partition (1-4)

    p 回车
    partition uumber(1-4):1 回车 这是选分第1个分区。
    first cylinder (1-17183,default 1):1 回车 这里1-17183是表示我的8G卡的存储量。第一个区从1开始。
    Last cylinder or +size or +sizeM or +sizeK (1-17183, default 17183): 70 回车  

    Command (m for help):
    -------------------------------------------------------------------------------
    SD卡剩下空间作为第二个区,也是Linux主分区,重复刚才分区的步骤。
    Command (m for help): n 回车
       e extended
       p primary partition (1-4)

    p 回车
    partition uumber(1-4):2 回车 这是分第2个区。
    first cylinder (6501-17183,default 6501): 回车 
    Last cylinder or +size or +sizeM or +sizeK (6501-17183, default 17183): 回车 
     
    Command (m for help):

    ==========================================
    刚才起立好分区 现在要改变硬盘分割区属性。

    Command (m for help):t 回车
    Partition number (1-4): 1 回车
    Hex code (type L to list codes): b 回车    这里要们要设定这个区为w95 FAT323分区。
    --------------
    Command (m for help):t 回车
    Partition number (1-4): 2 回车
    Hex code (type L to list codes): 83 回车    这里要们要设定这个区为Linux EXT3分区。

    ==========================================
    Command (m for help):a 回车  这里设定硬盘启动区
    Partition number (1-4): 1 回车

    Command (m for help):p 回车 可以看到刚才分区
    Command (m for help):w 回车 输入q 结束不存入硬盘分割区属性。
                            输入w 结束并写入硬盘分割区属性。

    重新启动,若不重启,执行partprobe,它能使内核在不重启的情况接受新的分区表信息。

    ==========================================
    输入fdisk -l 回车 如果命令提示没找到请输入/sbin/fdisk -l 回车查看分区信息。

    这时我们可以看到刚才把SD分的区 
    /dev/sdb1   w95 FAT32
    /dev/sdb2   Linux
    ==========================================

    2.制作SD卡启动盘

    上面已经将SD卡分成两个区,接下来是格式化SD卡,并拷贝文件的相应的分区,下面贴出的是执行脚本mksd-ti816x.sh:

    #!/bin/bash
    
    if [[ -z $1 || -z $2 || -z $3 || -z $4 ]]
    then
        echo "mksd-ti816x Usage:"
        echo "    mksd-ti816x <device> <MLO> <u-boot.bin> <uImage> <rootfs tar.gz >"
        echo "    Example: mksd-ti816x /dev/sdc MLO u-boot.bin uImage nfs.tar.gz"
        exit
    fi
    
    if ! [[ -e $2 ]]
    then
        echo "Incorrect MLO location!"
        exit
    fi
    
    if ! [[ -e $3 ]]
    then
        echo "Incorrect u-boot.bin location!"
        exit
    fi
    
    if ! [[ -e $4 ]]
    then
        echo "Incorrect uImage location!"
        exit
    fi
    
    if ! [[ -e $5 ]]
    then
        echo "Incorrect rootfs location!"
        exit
    fi
    
    echo "All data on "$1" now will be destroyed! Continue? [y/n]"
    read ans
    if ! [ $ans == 'y' ]
    then
        exit
    fi
    
    echo "[Partitioning $1...]"
    
    DRIVE=$1
    dd if=/dev/zero of=$DRIVE bs=1024 count=1024
         
    SIZE=`fdisk -l $DRIVE | grep Disk | awk '{print $5}'`
         
    echo DISK SIZE - $SIZE bytes
     
    CYLINDERS=`echo $SIZE/255/63/512 | bc`
     
    echo CYLINDERS - $CYLINDERS
    {
    echo ,9,0x0C,*
    echo ,,,-
    } | sfdisk -D -H 255 -S 63 -C $CYLINDERS $DRIVE
    
    echo "[Making filesystems...]"
    
    mkfs.vfat -F 32 -n boot "$1"1 &> /dev/null
    mkfs.ext3 -L rootfs "$1"2 &> /dev/null
    
    echo "[Copying files...]"
    
    mount "$1"1 /mnt
    cp $2 /mnt/MLO
    cp $3 /mnt/u-boot.bin
    cp $4 /mnt/uImage
    umount "$1"1
    
    mount "$1"2 /mnt
    tar zxvf $5 -C /mnt &> /dev/null
    chmod 755 /mnt
    umount "$1"2
    
    echo "[Done]"

    将这个执行脚本和所需的文件拷贝到/tftpboot目录(其他目录也可以)下,在执行脚本前mount一下,如果发现挂载了的umount卸载。

    执行./mksd-ti816x.sh /dev/sdb MLO u-boot_dvr.bin uImage_ud816x_dvr rootfs.tar.gz命令,最终在在分区一放入加载镜像文件,在分区二放入根文件系统。

    最后执行: setenv bootcmd 'mmc rescan 0;fatload mmc 0 0x81000000 uImage;bootm 0x81000000'
                 setenv bootargs 'console=ttyO2,115200n8 rootwait rw mem=256M notifyk.vpssm3_sva=0xBEE00000 vram=20M root=/dev/mmcblk0p2 noinitrd'
                 saveenv

    重新启动开发板,成功启动u-boot,linux内核和根文件系统。

    嵌入式QQ交流群:127085086
  • 相关阅读:
    深入浅出单实例Singleton设计模式
    设计模式之监听器模式
    Android 驱动(二) IIC简单介绍
    用XCA(X Certificate and key management)可视化程序管理SSL 证书(3)--创建自己定义的凭证管理中心(Certificate Authority)
    编译android-4.3.1_r源代码并刷到自己的Galaxy Nexus I9250真机上
    C++中的单例模式
    MessageDigest简单介绍
    白话经典算法系列之中的一个 冒泡排序的三种实现
    KNN算法理解
    TCP/IP数据包结构具体解释
  • 原文地址:https://www.cnblogs.com/cslunatic/p/3125247.html
Copyright © 2011-2022 走看看