Linux系统移植(Day16)

一 回忆昨天的昨天的内容
作业:
ROM:只读存储器
PROM:只能写入一次
EPROM:光可擦除
EEPROM: 电可擦除 
norfalsh:片内执行
nandflash:片内执行,速度快
EMMC

二. 移植Linux操作系统
2.1 烧录uboot
mkdir porting
cp ubootpak.bin ./

2.2 将Uboot烧录到TF卡中
    2.2.1 将SD卡插入读卡器,接到PC上
    mount 
    /dev/sdb1 上挂载的就是U盘设备
    需要将SD卡进行分区
    需要保留SD卡开头的512byte.
    第一个扇区中存放的分区表
    分区之后,第513byte的位置放ubootpak.bin
    
    2.2.2 创建SD卡分区
    1) 将SD卡插入PC
    2)确定一下Linux是否识别U盘
        mount 
        /dev/sdb 是整个SD卡设备
        /dev/sdb1 是SD卡中的第一个分区
        注意:SD卡分区之后,
        需要将Uboot烧录到/dev/sdb文件中
    3) mount时,找到类似于:
            /dev/sdb1 on /media/liuyang/Wilhelm type
            如果没有/dev/sdb1的挂载信息,不需要操作
            如果有/dev/sdb1的挂载信息,需要卸载
            
    4)为了给SD卡重新分区,
    需要把挂载上的分区都卸载掉
        umount /dev/sdb1
        umount /media/liuyang/Wilhelm
    5) 为了确保卸载成功
        再执行一次mount,进行查询
    6) 重新建立分区:
        a) sudo fdisk /dev/sdb
        b) 进入到Command (m for help):
             输入p,查看SD的分区情况
      c) 输入d,删除分区
      d) 输入p,查看SD的分区情况
      e) 输入n,新建一个分区,会提示主分区还是扩展分区
      f) 输入p,创建主分区
      g) 分区号,直接敲回车,选择默认分区号
      h) 第一个分区大小,选择1/100 ---> 31162
      i) 是否移除签名,选择Y
      j) 输入t,格式化成fat32
      k) 输入L,查看所有的分区类型
      l) 输入b,选择FAT32格式
      m) 输入w,保存退出
    2.2.3 给SD卡新建的分区进行格式化:
        sudo mkfs.vfat -F 32 /dev/sdb1 -n Wilhelm
        sync 同步操作
        把SD卡从PC中拔掉
        
    2.2.4 烧写uboot
        执行dd命令烧写uboot
        1) 先将sd卡连接到linux
        2) 切换到ubootpak.bin所在目录
        3) 执行dd命令
            sudo dd if=ubootpak.bin of=/dev/sdb seek=1
            sync
            if=文件名 输入的文件
            of=文件名 输出的文件
            seek=block 从输出文件开头跳过block个块后再复制
        4) 将SD卡拔出,插入开发板的SD0插槽中,观察实验现象
        
    2.2.5    安装串口工具
        windows: Secure CRT 的软件包
        D:\easthome_porting\ARM环境\串口工具\SecureCRT\SecureCRT.exe
        安装好软件包之后,打开Secure CRT 
        点击connect,重启开开发板,观察实验现象。
        
        1) 打开设备管理器 ---》 端口 ---》comx
        2) 打开Secure CRT, 点击快速连接,选择对应的com口
            Serial, 115200, ... 硬件流控不要选,点击连接
          重启开开发板,观察实验现象。
        串口线:用于打印调试
          
    2.2.6 重启按键,进入uboot的命令行
        liuyang# 

2.3 烧写Linux内核的镜像

    www.kernel.org
    2.3.1 获取内核的镜像文件
    cp /mnt/hgfs/easthome_porting/fastboot/uImage ./ 
    cp /mnt/hgfs/easthome_porting/fastboot/rootfs_ext4.img ./
    将来用fastboot.exe烧录
    用USB_OTG连接开发板和上位机 
    
    2.3.2 将uImage和rootfs_ext4.img 烧写到EMMC之前
    需要先将emmc进行分区
        1)进去下位机的uboot命令行
        2) fdisk 2 2 0x100000:0x4000000 0x4100000:0x2f200000 
             参数: 第一个2 明确:TF卡,EMMC硬件特性一模一样,通称MMC
                                      0 代表对SD0卡槽上的设备进行分区
                                      1 代表对SD1卡槽上的设备进行分区
                                      2 代表对emmc进行分区
                          第二个2 表示要分两个区,分别是uImage和rootfs的分区
                          
                          指定uImage的分、
                          起始地址:0x100000
                          偏移:0x4000000 
                          
                          指定rootfs的分区
                          起始地址:0x4100000
                          偏移:0x2f200000
                          
                          作业:1M 4M 16M 32M 64M 100M对应的16进制
                          
        3) 重启开发板,进入uboot的命令行
            print
            printenv 
            输入 re 命令重启
        
        4) 利用OTG_USB 烧录uImage 和rootfs
            1) 安装fastboot驱动
                按照资料包中《fastboot驱动安装.docx》
                安装fastboot驱动
            2) 在uboot的命令行输入 fastboot
               板子上会提示waiting for update...
            3) windows中,Win + R
                    输入 d: 
                    输入 cd easthome_porting
                    输入 cd fastboot
                    输入 dir 
                 进入到uImage和rootfs_ext4.img所在的目录,
                 检查uImage,rootfs_ext4.img,fastboot.exe
                 有没有这三个文件
                  烧录uImage:
                     输入 fastboot flash boot uImage
                     烧录根文件系统
                     输入 fastboot flash system rootfs_ext4.img 
                 
                 注意:一旦烧写完毕,立马拔掉USB_OTG!!!!
            
            至此,三大系统软件烧写完毕!
            
        2.3.3 修改两个必要的环境变量:
            uboot里面有两个必要的环境变量:
            bootargs:
            设置bootargs环境变量给linux内核传参
            
            bootcmd: 当uboot启动,3,2,1读秒的时候,如果倒计时
            没有被中断,倒计时为0,uboot会起bootcmd中的命令
            
            重启下位机,进入uboot的命令行:
            setenv bootcmd mmc read 0x48000000 
            0x800 0x3000 \;bootm 0x48000000
            
            saveenv 
            
            mmc read: uboot的命令,将emmc中的数据读取到内存中
            0x48000000: 读取到内存的起始地址
            0x800: 从EMMC的偏移多少的扇区的位置,开始拷贝
            0x3000: 从EMMC中读取的数据的大小
            \; 表示换行
            bootm : 从内存0x48000000的位置启动Linux内存
            
            
            bootargs: 
            setenv bootargs root=/dev/mmcblk0p2 init=/linuxrc 
            console=ttySAC0,115200 maxcpus=1 lcd=wy070ml tp=gslx680-linux
            saveenv
            
            /dev/mmcblk0p2 emmc中的第二个分区
            /linuxrc 一号进程对应的设备文件
            ttyS0,115200 控制台
            maxcpus 启动uboot时使用的cpu核数
            lcd lcd屏幕型号 
            tp 触摸板的型号
            
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值