• uboot实践:从ext4根文件系统加载内核、设备树、ramdisk


    前言

            其实,就是一边工作,一边写的笔记。

    一 将需要的文件通过scp命令发送发板子

    语法如下:        

    scp file_name user_name@192.168.0.250:/home/root/

            含义:将scp文件传送到192.168.0.25地址的/home/root/目录。

    二 普通根文件系统的启动

    从fat分区启动的bootcmd和bootargs

    setenv bootcmd 'mmc dev 1 1; fatload mmc 1:1 80800000 zimage;fatload mmc 1:1 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb;;bootz 80800000 - 83000000;'

    bootargs的值需要强调的是,中间不需要分号“;”间隔。添加了分号可能会报错。

    setenv bootargs ' console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw;'

    从ext4分区启动的bootcmd和bootargs

    setenv bootcmd 'mmc dev 1 2;ext4load mmc 1:2 80800000 /home/root/zImage;ext4load mmc 1:2 83000000 /home/root/imx6ull-14x14-emmc-7-1024x600-c.dtb;;bootz 80800000 - 83000000;'

    bootargs的值不用改,

    setenv bootargs ' console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw;'

    遍历/home/root/中的文件

    ext4ls mmc 1:2 /home/root

    1. =ext4ls mmc 1:2 /home/root
    2. <DIR> 4096 .
    3. <DIR> 4096 ..
    4. <DIR> 4096 test
    5. <DIR> 4096 bin
    6. 28612 capture
    7. <DIR> 4096 driver
    8. 110 .Xauthority
    9. <DIR> 4096 shell
    10. 51 .profile
    11. 3759 .bash_history
    12. <DIR> 4096 .ssh
    13. <DIR> 4096 bin_backup
    14. 8192 boot_env.bin
    15. 38351 imx6ull-14x14-emmc-7-1024x600-c.dtb
    16. 379904 u-boot-imx6ull-14x14-ddr512-emmc.imx
    17. 6497848 zImage
    18. =>

    在根文件系统中挂载fat分区

    详细步骤如下所示:

    1 创建一个挂载点/myfat

     mkdir myfat

    2 使用mount命令挂载,注意-t 选项的参数时vfat,不是ext2 和 ext4

    mount -t vfat /dev/mmcblk1p1 /myfat/

    3 遍历挂载点

    ls /myfat/
    

    如果能够成功看到里面的文件列表,说明挂载成功了。

    然后就可以向其中写入文件了。

    将需要的文件复制到myfat文件夹中。

    4 卸载挂载点

    umount /myfat/

    5 将挂载命令放到一个脚本mount.sh中:

    1. mkdir /myfat -p
    2. mount -t vfat /dev/mmcblk1p1 /myfat

    6 将卸载命令放到另一个脚本umount.sh中

    umount /myfat
    

    三 使用ramdisk根文件系统

    从fat分区启动zImage

    设置bootcmd

    setenv bootcmd 'mmc dev 1 1;fatload mmc 1:1 80800000 zImage;fatload mmc 1:1 82000000 imx6ull-14x14-emmc-7-1024x600-c.dtb;mmc dev 1 2;ext4load mmc 1:2 83000000 /home/root/ramdisk.img;bootz 80800000  83000000:04000000 82000000;'

    设置bootargs

    setenv bootargs 'console=ttymxc0,115200 root=/dev/ram0 rootfstype=ext2 rootwait rw'

    从ext4分区启动zImage

    设置bootcmd

    setenv bootcmd 'mmc dev 1 2;ext4load mmc 1:2 80800000 /home/root/zImage;ext4load mmc 1:2 82000000 /home/root/imx6ull-14x14-emmc-7-1024x600-c.dtb;ext4load mmc 1:2 83000000 /home/root/ramdisk.img;;bootz 80800000 83000000:04000000 82000000;'

    设置bootargs

    setenv bootargs 'console=ttymxc0,115200 root=/dev/ram0 rootfstype=ext2 rootwait rw'

    打印bootcmd

    1. => printenv bootcmd
    2. bootcmd=mmc dev 1 2;ext4load mmc 1:2 80800000 /home/root/zImage;ext4load mmc 1:2 82000000 /home/root/imx6ull-14x14-emmc-7-1024x600-c.dtb;ext4load mmc 1:2 83000000 /home/root/ramdisk.img;;bootz 80800000 83000000:04000000 82000000;
    3. =>

    打印bootargs

    1. => printenv bootargs
    2. bootargs=console=ttymxc0,115200 root=/dev/ram0 rootfstype=ext2 rootwait rw
    3. =>

    四 nfs挂载根文件系统

    进入uboot,设置ip地址

    setenv ipaddr 192.168.5.25

    设置服务器的ip地址。

    setenv serverip 192.168.5.6

    设置bootargs

    setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.5.6:/home/lkmao/nfsroot/buildrootfs,proto=tcp rw ip=192.168.5.25:192.168.5.6:192.168.5.1:255.255.255.0:::'

            tymxc0改成自己的串口名字,这里的192.168.5.25是板子的ip地址,192.168.5.6是ubuntu主机的ip地址,/home/lkmao/nfsroot/buildrootfs是根文件系统在ubuntu主机中的目录。照着改过来就行了,其他不用变。

    setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.5.6:/home/lkmao/nfsroot/buildrootfs,proto=tcp rw ip=192.168.5.25:192.168.5.6:192.168.5.1:255.255.255.0:::'
    

    另一种IP的配置,

    setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.0.11:/home/lkmao/nfsroot/buildrootfs,proto=tcp rw ip=192.168.0.3:192.168.0.11:192.168.0.1:255.255.255.0:::'
    

    设置bootcmd

    setenv bootcmd 'mmc dev 1 1; fatload mmc 1:1 80800000 zimage;fatload mmc 1:1 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb;;bootz 80800000 - 83000000;'

    记得保存

    saveenv

    从Tftp加载内核、设备树、ramdisk.img

    64M版本

    setenv bootcmd 'tftp 80800000 zImage;tftp 82000000 emmc.dtb;tftp 83000000 ramdisk.img;bootz 80800000 83000000:04000000 82000000;'

    32M版本

    setenv bootcmd 'tftp 80800000 zImage;tftp 82000000 emmc.dtb;tftp 83000000 ramdisk.img;bootz 80800000 83000000:02000000 82000000;'
    setenv bootargs 'console=ttymxc0,115200 root=/dev/ram0 rootfstype=ext2 rootwait rw'

    不使用ramdisk

    1. setenv bootcmd 'tftp 80800000 zImage;tftp 83000000 emmc.dtb; bootz 80800000 - 83000000;'
    setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.0.11:/home/lkmao/nfsroot/buildrootfs,proto=tcp rw ip=192.168.0.3:192.168.0.11:192.168.0.1:255.255.255.0:::'

    从根文件系统加载全部

    因为特别需要,所以需要这么干。

    setenv bootcmd 'mmc dev 1 2;ext4load mmc 1:2 80800000 /zImage;ext4load mmc 1:2 82000000 /emmc.dtb;ext4load mmc 1:2 83000000 /ramdisk.img;;bootz 80800000 83000000:04000000 82000000;'
    setenv bootargs 'console=ttymxc0,115200 root=/dev/ram0 rootfstype=ext2 rootwait rw'

    五 删除密码

            直接在/etc/passwd文件和shadow文件删密码可以吗?可以,但是删除以后,ssh就登录不上了。所以还是要老老实实的使用passwd命令来将密码重置为空。

            就是提示输入密码的时候,直接按回车键,这样密码就为空了。

    1. # passwd root
    2. Changing password for root
    3. New password:
    4. Bad password: too short
    5. Retype password:
    6. passwd: password for root changed by root
    7. #

    删除用户

    deluser lkmao

    删除组

    delgroup lkmao

    其他杂项

    两个重要的环境变量

    LD_LIBRARY_PATH 和PATH

    PS1的配置方式

    在/etc/profile文件中:

    1. export PATH="/bin:/sbin:/usr/bin:/usr/sbin"
    2. if [ "$PS1" ]; then
    3. if [ "`id -u`" -eq 0 ]; then
    4. # export PS1='# '
    5. export PS1='\u@\h:\w# '
    6. else
    7. # export PS1='$ '
    8. export PS1='\u@\h:\w$ '
    9. fi
    10. fi
    11. export PAGER='/bin/more'
    12. export EDITOR='/bin/vi'
    13. # Source configuration files from /etc/profile.d
    14. for i in /etc/profile.d/*.sh ; do
    15. if [ -r "$i" ]; then
    16. . $i
    17. fi
    18. done
    19. unset i

    如果当前的用户的id是0,就执行export PS1='\u@\h:\w# ',root用户的id是0,普通用户的id大于1000,普通用户执行export PS1='\u@\h:\w# '。

    umask.sh文件

    其中的内容默认是

    umask 022

    新建一个文件a:

    1. root@host:/etc/profile.d# touch a
    2. root@host:/etc/profile.d# ls -ls
    3. total 4
    4. 0 -rw-r--r-- 1 root root 0 Sep 7 2022 a

    新建文件的属性是644,也就是说umask的计算方式如下

    新建文件属性+umsak = 666

    就是644 + 022 = 666;

    如果想新建文件属性是664,那就将umask设置为002,实验一下:

    修改文件/etc/profile.d/umask.sh将其中的内容改为umask 002,

    1. root@host:/etc/profile.d# touch b
    2. root@host:/etc/profile.d# ls -ls
    3. total 4
    4. 0 -rw-rw-r-- 1 root root 0 Sep 7 2022 b

    果然新建的文件属性变为660了。

    在开发板通过nfs挂载ubuntu的目录

    # mount -t nfs -o nolock 192.168.0.11:/home/lkmao/nfsroot/server /server

    总结

           一些总结。

  • 相关阅读:
    搞了三天终于成功跑起来GitHub上的vue-element-admin最新解决办法!(mac系统亲测有效)
    jni-03、CMakeLists、gradle配置
    客户关系管理系统(CRM)开发的意义
    基于Spring Boot的中小型医院网站的设计与实现源码(springboot)
    haproxy
    【Go】令牌桶限流算法
    【开题报告】基于SpringBoot的医疗器械出入库系统的设计与实现
    ASP.NET CORE使用WebUploader对大文件分片上传,实时通知前端上传进度
    深度学习 Day 12——利用卷神经网络实现MNIST手写数字的识别
    Cocos Creator发布微信小游戏包内体积过大问题
  • 原文地址:https://blog.csdn.net/yueni_zhao/article/details/126723331