首页 > 学院 > 开发设计 > 正文

Porting:uboot烧写、linux内核烧写、根文件系统烧写:系统移植,nfs同步网络配置

2019-11-08 01:34:14
字体:
来源:转载
供稿:网友
1、什么叫系统移植?    根据硬件的变化,对已有的代码进行少量的修改,该套代码就很容易在新的硬件平台上运行,这个过程就叫做移植。    做移植的前提条件:        1)'对要移植的代码很熟悉;        2)'对目标平台的硬件差异比较清楚。2、移植课程主要内容    1)'u-boot的移植         bootloader:<==>BIOS         uboot是bootloader的一种,为操作系统的运行做准备工作:            >>包括必要硬件的初始化工作;            >>加载操作系统;            >>运行操作系统;        vivi:韩国一家公司开发的,也是一种bootloader,针对三星处理器设计的。    2)'linux内核的移植         linux内核的五大功能:            a)内存管理;            b)进程管理及进程间通信;                 main ( ) {                    // 先创建运行两个线程                 }                 某个线程中 ( ) {                    fork ( ); // 子进程中有 1 个线程(主线程)                                // 主进程中有 3 个线程(1个主线程2个创建的线程)                 }                 $:' ps -T -p PID            c)虚拟文件子系统;<==>文件系统            d)设备驱动管理;            e)网络子系统(很多种类型的网络协议相关的代码);    3)'根文件系统的制作         各种命令行命令(ls rm....)对应的代码的移植。【目标】1. 熟悉三部分代码的框架;2. 理解移植的步骤;3. 掌握根文件系统的制作方法;3、开发板烧写实验    注意EMMC的分区。    分区原则:每个分区的大小要大于等于要存储的镜像文件的大小。    EMMC:'nandFlash + 控制短路'    开发板中的默认分区:        0--------1M---------65M------------819M---------------8192M扇区: 0-------0x800-----0x20800--------0x199800---------0x1000000         |--uboot--|----linux----|-----rootfs-----|--------appfs---------|/* 如果实验有问题,可以尝试重新分区:*/        #:'mmc erase 0 0x1000000        重新执行 3.1  3.2        Kernel panic        ...        Rebooting in 5 reconds...        /* 分区命令:*/        #:'fdisk 2 3 0x100000:4000000 4100000:0x2f200000 33300000:0        分3个区        ' 重启开发板,查看分区情况。        #:'mmc part        /* 把本地和服务器ip均在TF的ubootpak启动换将下配置 */        #:'setenv ipaddr 192.168.1.6        #:'setenv serverip 192.168.1.8        #:'saveenv/* 从这个位置上读出linux内核到48000000位置 */3.1 烧写uboot        空板子:emmc中无任何代码,可以借助TF卡来完成烧写。arm裸板        虚拟机共享porting文件夹        $:cp /mnt/hgfs/porting/env/uboot.bin /tftpboot/        #:'tftp 48000000 uboot.bin        #:'update_mmc 2 2ndboot 0x48000000 0x200 0x555f0        '拔出TF卡,重启开发板 '        // 2:板子emmc设备。0/1:TF卡槽中的设备        // 2ndboot:指的是uboot分区        // 48000000:源数据地址        // 0x200:写入的偏移位置        // 0x555f0:写入的数据长度3.2 烧写linux内核        $:cp /mnt/hgfs/PRoting/env/uImage /tftpbott/        #:'tftp 48000000 uImage        #:'mmc write 48000000 0x800 0x3000        #:'setenv bootcmd mmc read 0x48000000 0x800 0x3000 /; bootm 0x48000000        #:'saveenv        #:help mmc            0x48000000:源数据地址            0x800:要写入的位置(单位是扇区,十进制512)            0x3000:要写入的数据长度(单位是扇区,十进制512)3.3 烧写根文件系统        $:cp  /mnt/hgfs/porting/env/rootfs_ext4.img /tftpboot/        #:'tftp 48000000 rootfs_ext4.img        #:'mmc write 48000000 20800 0x32000        #:'setenv bootargs root=/dev/mmcblk0p2 rootfstype=ext4 console=ttySAC0,115200 maxcpus=1 lcd=vs070cxn tp=gslx680-linux                root:根文件系统所在设备文件的名称                rootfstype:根文件系统的类型                console:控制台,ttySAC0,uart0控制器                maxcpus:=1,只启动cpu0                lcd:指定lcd的型号                tp:指定触摸屏的型号        #:'saveenv      重启开发板:           用户名:root           密码:123456           #:'cd /Ubuntu上命令:    $:vi hello.c    $:arm-c..<table>..gcc hello.c    $:cp a.out /tftpboot/开发板上命令:    #:which tftp    #:ifconfig eth0                        // 查看ip    #:' ifconfig eth0 192.168.1.6      // 配置开发板上linux的ip    #:' ping 192.168.1.8                   // 查看网络连接是否接通    #:tftp -gr a.out 192.168.1.8     // 将a.out拷贝到开发板的linux文件中    #:whoami                               // 确认是root用户    #:ls -l a.out                             // a.out被开发板的linux系统保护策略去掉可执行权限了    #:'chmod +x a.out                   // 添加可执行权限    #:a.out                                    // 执行结果 hello,world!4、网络nfs网络连接根文件系统     这种方式一般用于开发调试阶段。    4.1 服务器端设置 - PC-ubuntu-linux "在linux没有nfs服务时执行4.1"         1) 安装nfs server             联网:$:'sudo apt-get install nfs-kernel-server             未联网:$:'cd ~/Downloads/nfs/                          $:' sudo dpgk -i *.deb         2) 准备根文件系统数据             env/rootfs_qt.tar.bz2             $:'cd /opt/             $:'cp /mnt/hgfs/porting/env/rootfs_qt.tar.bz2 .             $:'sudo tar xvf *.bz2         3) 对服务器进行配置             配置PC机上的哪些目录可以让客户端通过nfs方式访问             $:'sudo vi /etc/exports              /opt/rootfs  *(rw,sync,no_root_squash)              '/opt/rootfs':允许客户端通过nfs方式访问的目录              /* ubuntu-linux下操作该目录,即可同步到开发板linux根目录 */              *:所有客户端都可以访问                    192.168.1.* 代表客户端IP为192.168.1.X可以访问              rw:客户端对目录有读写权限              sync:同步 // man 2 sync; 重要的write函数写入数据后可加。              no_root_squash:权限,角色          4) 对新的配置重启nfs服务              $:'sudo /etc/init.d/nfs-kernel-server restart              // 看到4个 [ OK ] 重启成功。    4.2 客户端设置 - 开发板          #:'reboot         // 进入u-boot的命令行,3秒倒计时按空格          #:'setenv bootargs root=/dev/nfs nfsroot=192.168.1.8:/opt/rootfs ip=192.168.1.6:192.168.1.8:192.168.1.1:255.255.255.0 lcd=vs070cxn tp=gslx680-linux console=ttySAC0,115200 maxcpus=1                /dev/nfs:属于固定写法。只要是nfs方式挂在网络文件系统          #:'saveenv          // uboot下 re 命令,不做任何操作等待 starting kernel启动完全          #:'re                Welcome to X6818                tarena login: root                PassWord: 123456                成功!!!           #:'cd /


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表