《tiny4412启动》

参考:https://blog.csdn.net/qq_23922117/article/details/78312908

1.编译uboot

a) 安装好toolchain (arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz)并设置好

   环境变量PATH,保证可以正常使用。

 sudo tar -xvf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz –C /

 sudo vim /etc/environment修改PATH为:

 PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/FriendlyARM/toolschain/4.5.1/bin"

问题:

  了解几种保存环境变量的方式有什么不同?

b) 解压 uboot_tiny4412-20130729.tgz 并进入相应的目录

   tar xzf uboot_tiny4412-20130729.tgz

c) 配置 uboot 并编译

   cd uboot_tiny4412

   make tiny4412_config

   make

 

d) 编译 用于生成bl2 的工具

   make -C sd_fuse

 

2.制作SD卡启动

  假设sd卡在linux中被识别为/dev/sdb。

    cd sd_fuse/tiny4412

  ./sd_fusing.sh /dev/sdb

 

3.启动uboot

  将sd卡插入开发板,选择SD卡启动,开启后就能看到uboot的启动信息。如果开发板是1506的,那么用光盘中的uboot只有打印ok,因为光盘中的uboot是针对1306,1506相对于1306少了两块ddr。要使用最新的uboot,在友善论坛可以找到最新的uboot。

 

4.编译内核

  1.cp  tiny4412_linux_defconfig  .config

  2.make menuconfig

  然后将CONFIG_ARM_TRUSTZONE选项去掉,可以在.config中直接去掉。原版的内核配置是和superboot配套的,但是uboot里面暂不支持改功能,如果不去掉,在启动内核的时候,就会提示Uncompressing linux.....done,booting the kernel。

  3.关电取出SD卡,并将PC机上的内核zImage拷到SD卡上的第一个分区 fat32。

  4.fatls mmc 0:1 /      //查看第0个MMC设备 第一个分区 的分区目录

  5.fatload mmc 0:1 0x40008000  zImage    //将SD卡里面的zImage加载到内存地址0x40008000

  6.bootm 0x40008000

问题:

  正常bootm是引导uImage的,这里如果使用go 0x40008000还是启动不了。了解bootm和go的不同之处?

  7.如果可以正常启动内核,那么再次进入uboot:

     set bootcmd "fatload mmc 0:1 0x40008000  zImage ;bootm 0x40008000 ”

          save

 

5.虚拟机安装nfs

  1.在ubuntu12.04上安装NFS Server

  sudo apt-get install portmap

  sudo apt-get install nfs-kernel-server

  sudo apt-get install nfs-common

  

  2.修改/etc/exports文件

  sudo vi /etc/exports

  在文件的末尾添加这一句:
  /home/george/1702/exynos/filesystem  *(rw,async,no_root_squash,no_subtree_check)
  格式说明:
  *:允许所有的网段访问,也可以使用具体的IP
  rw:挂接此目录的客户端对该共享目录具有读写权限
  sync:资料同步写入内存和硬盘
  no_root_squash:root用户具有对根目录的完全管理访问权限。
  no_subtree_check:不检查父目录的权限。

  目录和*之间要有个空格,不然mount的时候会提示permission denied。
  注意,*和后面的括号不能出现空格。
  然后保存退出。

  

  3.重启NFS服务

   sudo exportfs –a

   sudo /etc/init.d/nfs-kernel-server restart

 

6.配置编译busybox

   1.安装编译busybox

    安装busybox,下载链接https://busybox.net/

    mkdir filesystem

    tar -xzvf busybox-1.22.1.tar.bz2

    cd busybox-1.22.1/

    make defconfig

    make menuconfig

  2.配置busybox

    《tiny4412启动》_第1张图片

 

    《tiny4412启动》_第2张图片

 

    《tiny4412启动》_第3张图片

 

    选择完,我们退出保存,然后make -j4,进行编译,编译完成之后,我们再make install,这样会在当前目录下生成_install文件夹,检测有没有成功:

    file bin/busybox

    如果出现一下信息,说明成功了:

    bin/busybox: ELF 32-bit LSB shared object, ARM, version 1 (SYSV), dynamically linked (uses shared libs), stripped

 

  3.制作根文件系统

    cd filesystem

    cp ../busybox-1.22.1/_install/* . -r

    mkdir etc dev opt sys tmp mnt lib proc

    mkdir etc/init.d

    vim etc/init.d/rcS

    在rcS里添加如下内容:

 

#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin

runlevel=S

prevlevel=N

umask 022

export PATH runlevel prevlevel

/bin/mount -a     #挂载fstab文件中所有指定的文件系统

echo /sbin/mdev>/proc/sys/kernel/hotplug

mdev -s                 #在/dev目录下建立必须的设备节点

/bin/hostname -F /etc/sysconfig/HOSTNAME

#设置主机的名字

    vim etc/inittab

    在inittab里添加如下内容:

::sysinit:/etc/init.d/rcS    #设置内核的热插拔,有mdev接收来自内核的消息并做出响应

::askfirst:-/bin/sh         #在串口启动一个登陆会话

::ctrlaltdel:/sbin/reboot    #作为init重启执行程序

::restart:/sbin/init

::showdown:/bin/mount        #告诉init在关机时运行umount命令卸载所有文件系统,如果卸载失败,以只读方式重新挂载

    vim etc/fstab

    在fstab里添加如下内容(按tab键隔开):

proc       /proc    proc       defaults        0       0

sysfs      /sys      sysfs      defaults        0       0

tmpfs     /tmp      tmpfs     defaults        0       0

  注意:
  第一列是挂载设备  
  第二列是挂载目录
  第三列是挂载文件系统类型
  第四列是挂载选项(裁掉了,哈哈) 

    vim etc/profile

    在profile里添加如下内容:

#/etc/profile:system-wide .profile file for the Bourne shells

#!/bin/sh

#vim:syntax=sh

#No core file by defaults

#ulimit -S -c 0>/dev/null 2>&1

USER="id -un"

LOGNAME=$USER

PS1='[root@tiny4412]#'

PATH=$PATH

HOSTNAME='/bin/hostname'

export USER LOGNAME PS1 PATH

    sudo chmod 777 filesystem

    创建设备文件:sudo mknod dev/console c 5 1

  

  4.完善动态链接库

    (1)我们在busybox设置的是动态链接库,而且编译器是arm-linux-gcc,找到安装arm-linux-gcc的安装路径

      which arm-linux-gcc

    /opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-gcc上面是我的路径,/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib,这个就是要复制出来的动态库的路径,把里面的动态链接文件复制到filesystem文件夹下

    (2)复制动态链接文件

    cp /opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib/*  ./lib   -r

 简单小结一下:
1.inittab,rcS,fstab关系
系统启动挂载文件系统--->
--->读取/etc/inittab文件,解析其中定义的动作
--->根据sysinit定义的process执行/etc/init.d/rcS
--->/etc/init.d/rcS中第一条命令 mount -a
--->读取/etc/fstab文件
--->根据文件列表内容逐个挂载其中的设备到指定地
2.profile文件
设置环境变量,根据这里设置命令提示符号相关的环境变量
用户可以根据自己需要添加环境变量
3./etc/init.d/rcS
执行系统初始化时候,想开机启动的程序都可以写在这个文件中.

 

7.挂载nfs网络文件系统

  1.首先内核要支持挂载nfs文件系统

    如果内核没有配置支持挂载nfs文件系统,就会出现VFS: Cannot open root device “nfs” or unknown-block(0,255): error -6

    《tiny4412启动》_第4张图片

 

 

 《tiny4412启动》_第5张图片

 

 

  《tiny4412启动》_第6张图片

 

 《tiny4412启动》_第7张图片

 

《tiny4412启动》_第8张图片

   2.确保开发板和虚拟机能ping通

    虚拟机要设置为vmnet0为桥接模式。虚拟机和开发板在同一个网段,就可以了。

 

  3.本地挂载nfs

    mount -t nfs -o nolock  192.168.66.66:/nfs/filesys    /nfsroot

    其中192.168.66.66是虚拟机的ip地址 

  4.在uboot中挂载

    setenv bootargs root=/dev/nfs nfsroot=192.168.66.66:/nfs/fs/filesystem ip=192.168.66.88 init=/linuxrc console=ttySAC0,115200

    ip=192.168.66.88为开发板的ip地址

    saveenv

 

出现的问题:

 1.挂载得时候提示permission denied

《tiny4412启动》_第9张图片

 

 可以ping得通,说明网络没有问题,但是挂载得时候提示没有权限。应该就是nfs设置得时候出现问题,打开/etc/exports,发现目录和*中间没有空格。

 

2.启动内核提示“INFO: task xxxxxx: 634 blocked for more than 120 seconds.

《tiny4412启动》_第10张图片

 

 解决方法:

  修改系统信息配置文件sysctl.conf,此配置文件在/etc目录下。打开配置文件在最后添加如下两行代码:

  vm.dirty_background_ratio=5
  vm.dirty_ratio=10

参考博客:https://blog.csdn.net/electrocrazy/article/details/79377214

 

3.uboot启动不了内核

  可能原因:1.uboot和内核得机器码不对应   2.bootarg设置  

 

  先查找uboot中tiny4412.h中的机器码,然后查找对应的头文件

  

  接下来查找kernel里面的机器码是多少

  https://www.cnblogs.com/linfeng-learning/p/9285546.html

  https://www.cnblogs.com/linfeng-learning/p/9285546.html

  

  所以uboot和kernel的机器ID是不一样的。首先修改机器ID

 

注意:

  1.通过fdisk -p查看不同得存储

  《tiny4412启动》_第11张图片

 

  可以看出0是SD卡 ,1是emmc

 

 

 

 

 

  

你可能感兴趣的:(《tiny4412启动》)