S3C6410 完全由SD卡启动Linux流程

1. s3c6410 SD启动原理 s3c6410 支持Nand Flash本地启动Linux,包括内核,根文件系统,bootloader均写入在Nand Flash.这样可以独立运行.

很多情况下,Nand Flash的某种原因无法写入内核和Rootfs.而使用tftp下载内核,用NFS启动根文件系统比较慢.s3c6410 支持 SD卡启动,经过改造u-boot可以从SD卡引导内核,这样而Linux 又可以从SD卡的装载ext3根文件系统.这样可以制作一个完整的SD卡启动卡. 这样bootloader(u-boot)可以写入SD卡,引导扇区. bootloader的第一阶段把自己装入在内存高端地址看后,可以用两种方法从SD卡装入内核到内存. 一种是用fatload命令从fat分区装入内核文件到内存。 fatload mmc 1 address filename (上述命令表示从第一个mmc设备装入文件filename到内存的address当中),这个需要完整的实现fat的驱动,因此很多u-boot没有带. 另外一种常见的做法是使用u-boot的movi 命令. 用movi 命令直接读写SD卡sector.但是这样有可以与文件系统有冲突,因此要小心分区. 后面就是用这个方法来实现启动的.可以把movi读入命令写入bootcmd 实现自动启动 3.内核装入后,可以支持用ext3的格式作根文件系统,这样可以把SD卡一个分区格式化成ext3即 可以启动 ,这样要修改bootargs 这个可以参考<<ARM-Linux使用SD卡根文件系统>>http://www.linuxidc.com/Linux/2011-11/47797.htm2.Linux SD分区操作. 支持这种需要2G以下,非SDHC卡,假设是一个2G SD卡,分300M给FAT,剩下全部给 EXT3格式,作根文件系统。 bootloader写在SD卡的引导区,不占用分区空间 Linux 对SD卡的的操作,如果第一个插入的SD卡是 /dev/sda,第二个SD卡是/dev/sdb …依次类推. 如果第一个SD卡的第一个分区是 /dev/sda1 ,第二个分区 /dev/sda2 .如果上一个卡(sda)未安全拨下,而第二次插入也会变成sdb. 所以插入卡时要小心检测SD卡对应的设备结点. 2.1 Linux 分区工具 fdisk. fdisk 与dos下的工具同名,在操作SD分区,最好把分区文件目录umount掉,否则会修改分区失败,也注意要把SD卡的写保护锁打开. 命令格式 fdisk <设备结点> 这是指设备结点/dev/sda之类,不要对/dev/sda1 之类操作.

    #fdisk /dev/sdaThe number of cylinders for this disk is set to 35560.There is nothing wrong with that, but this is larger than 1024,and could in certain setups cause problems with:1) software that runs at boot time (e.g., old versions of LILO)2) booting and partitioning software from other OSs(e.g., DOS FDISK, OS/2 FDISK)Command (m for help):m #<————显示fdisk菜单Command actiona toggle a bootable flagb edit bsd disklabelc toggle the dos compatibility flagd delete a partitionl list known partition typesm print this menun add a new partitiono create a new empty DOS partition tablep print the partition tableq quit without saving changess create a new empty Sun disklabelt change a partition’s system idu change display/entry unitsv verify the partition tablew write table to disk and exitx extra functionality (experts only)Command (m for help):p #<——————–打印分区表Disk /dev/sda: 2002 MB, 2002780160 bytes11 heads, 10 sectors/track, 35560 cylindersUnits = cylinders of 110 * 512 = 56320 bytesDevice Boot Start End Blocks Id System/dev/sda1 2 35561 1955775+ b W95 FAT32 #原有的FAT32分区

接下操作,是删除原有分区,并且新建两个分区,一个用FAT,一个是EXT32根文件系统

    Command (m for help):d #<————-删除一个分区Selected partition 1Command (m for help):n #<————-新建一个分区Command actione extendedp primary partition (1-4)p #<————–选择创建 primary 首要分区Partition number (1-4):1 #<———第一个首要分区First cylinder (1-35560, default 1):#<———起始位置,直接回车用缺省值Using default value 1Last cylinder or +size or +sizeM or +sizeK (1-35560, default 35560):300M#<—- 第一个分区使用 300M空间Command (m for help): pDisk /dev/sda: 2002 MB, 2002780160 bytes11 heads, 10 sectors/track, 35560 cylindersUnits = cylinders of 110 * 512 = 56320 bytesDevice Boot Start End Blocks Id System/dev/sda1 1 300 16495 83 LinuxCommand (m for help):n #<—-建第二个分区Command actione extendedp primary partition (1-4)p #<————–选择创建 primary 首要分区Partition number (1-4):2 #<———第二个首要分区First cylinder (301-35560, default 301):Using default value 301Last cylinder or +size or +sizeM or +sizeK (301-35560, default 35560):Using default value 35560#直接回车表示缺省值,即把剩下所有空间都归入这个分区Command (m for help): pDisk /dev/sda: 2002 MB, 2002780160 bytes11 heads, 10 sectors/track, 35560 cylindersUnits = cylinders of 110 * 512 = 56320 bytesDevice Boot Start End Blocks Id System/dev/sda1 1 300 16495 83 Linux/dev/sda2 301 35560 1939300 83 LinuxCommand (m for help):w #<——-将分区表写入SD卡,至此才真正生效The partition table has been altered!Calling ioctl() to re-read partition table.Syncing disks.

2.2 格式化两个分区 第一个格式化成 FAT mkfs.vfat /dev/sda1 第二个格式化 格式ext3 格式mkfs.ext3 /dev/sda2

    #mkfs.vfat /dev/sda1 #<———-格式化命令mkfs.vfat 2.11 (12 Mar 2005)[root@tch u-boot-1.1.6_hxy6410]#mkfs.ext3 /dev/sda2 #<——格式化命令mke2fs 1.39 (29-May-2006)Filesystem label=OS type: LinuxBlock size=4096 (log=2)Fragment size=4096 (log=2)242880 inodes, 484825 blocks24241 blocks (5.00%) reserved for the super userFirst data block=0Maximum filesystem blocks=49912217615 block groups32768 blocks per group, 32768 fragments per group16192 inodes per groupSuperblock backups stored on blocks:32768, 98304, 163840, 229376, 294912Writing inode tables: doneCreating journal (8192 blocks): doneWriting superblocks and filesystem accounting information:doneThis filesystem will be automatically checked every 33 mounts or180 days, whichever comes first. Use tune2fs -c or -i to override.

2.3 测试文件系统是否可以用 mount -t ext3 /dev/sda2 /mnt 2.4 把根文件系统拷入SD卡,r表示递归,a表示把权限,符号链接等信息也拷贝 cp -ra /home/hxy/rootfs/* /mnt3.Bootloader(u-boot)操作 3.1 写bootloader 写入bootloader 需要我们的的LINUX下工具write_sd 命令,把支持SD卡启动版本 u-boot-movi.bin写入引导区

./write_sd /dev/sda u-boot-movi.bin此时这张SD卡变成一个S3C6410启动盘 3.2 写入内核 将开发板置SD卡启动模式,并将SD卡启动盘插入.开机长按回车进入u-boot控制台 输入如下命令 tftp 0x50008000 uImage #用tftp下载内核到内存0x50008000 movi write kernel 0x50008000#从0x50008000读取内核并写入sd卡的8092扇区 以下是命令系列

    hxy #tftp 0x50008000 uImagedm9000 i/o: 0x18000300, id: 0x90000a46MAC: 11:22:33:44:55:66operating at 100M full duplex modeTFTP from server 192.168.1.254; our IP address is 192.168.1.5Filename ‘uImage’.Load address: 0x50008000Loading: #########################################################################################################################################################################################################################################################################################################################################################################################################doneBytes transferred = 2130724 (208324 hex)hxy #movi write kernel 0x50008000Writing kernel to sector 3902926 (8192 sectors).. completedhxy #

3.3 配置bootloader # 修改内核启动配置 set bootcmd "movi read kernel 0x50008000 ; bootm 0x50008000" #修改文件系统启动,使用ext3的根文件系统 set bootargs "noinitrd root=179:2 rw console=ttySAC0" #保存配置 save #重启开发板 reset如果配置正常,应该能从SD卡启动内核看到小企鹅,并能从SD卡启动根文件系统上的qtopia3.4 启动根文件后, 使用nfs 在开发板mount NFS服务器必须用如下选项 mount -t nfs-o intr,nolock,rsize=1024,wsisze=1024192.168.1.254:/home/hxy /mnt/nfs 必须要用 -o intr,nolock,rsize=1024,wsisze=1024 ,这是与桌面机的 mount -t nfs192.168.1.254:/home/hxy /mnt/nfs #最大差别想起那座山,那个城,那些人……

S3C6410 完全由SD卡启动Linux流程

相关文章:

你感兴趣的文章:

标签云: