IMX6Q 制作根文件系统

运行交叉编译工具,创建交叉编译环境

编译busybox

1>:下载一个busybox,我用的是 busybox1.28.4,  解压到工作目录下(~ /目录).

2> : make menuconfig

        Settings --->

                        build options --->

                                    cross compiler prefix (添加交叉编译工具链绝对路径)

/opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-

                                    path to sysroot (添加sysroot路径)

/opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi

                                    additional CFLAGS(配置环境参数)

-march=armv7-a -mfloat-abi=hard -mfpu=neon -mtune=cortex-a9 --sysroot=/opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi

                                 additional LDFLAGS(配置环境参数)

--sysroot=/opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi

                                additional LDLIBS(不需要添加外部库)

4> :运价交叉编译工具链的环境变量脚本

        .    /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa9hf-neon-poky-linux-gnueabi

5>: 编译根文件系统

    make

6> : 将根文件系统加载到根目录下

make CONFIG_PREFIX=/home/fangxin/rootfs  install

7> :拷贝编译器运行库

cp  -a    /opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi/lib/*   /home/fangxin/rootfs/lib

cp  -a    /opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi/usr/lib/*   /home/fangxin/rootfs/usr/lib

8>:构建etc目录

      在etc目录下创建inittab文件,内容如下  

  1. ::sysinit:/etc/init.d/rcS  
  2. console::askfirst:-/bin/sh  
  3. ::restart:/sbin/init  
  4. ::ctrlaltdel:/sbin/reboot  
  5. ::shutdown:/bin/umount -a -r  
  6. ::shutdown:/sbin/swapoff -a 

     在etc/init.d/目录下创建rcS文件,内容如下

  1. echo "----------mount all.........."  
  2. mount -a  
  3. echo "----------Starting mdev......"  
  4. echo /sbin/mdev > /proc/sys/kernel/hotplug  
  5. mdev -s  
  6. /bin/hostname -F /etc/sysconfig/HOSTNAME

        为inittab和rcS文件添加可执行权限

  1. chmod a+x inittab  
  2. chmod a+x rcS

        在etc目录下创建fstab文件,内容如下

  1. #evice mount-point type       option       dump   fsck   order  
  2. proc /proc proc defaults 0 0  
  3. none /tmp ramfs defaults 0 0  
  4. mdev /dev ramfs defaults 0 0  
  5. sysfs /sys sysfs defaults 0 0  

       在根目录下创建文件夹

      mkdir proc tmp dev sys

     在dev下创建console设备

     sudo mknod console c 5 1

       在etc目录下创建profile文件,内容如下

  1. PATH=/bin:/sbin:/usr/bin:/usr/sbin    
  2. export PATH    
  3. #set hostname    
  4. HOSTNAME='/bin/hostname'    
  5. export HOSTNAME    
  6. # Set PS1    
  7. PS1='[\u@\h \W]\$'  
  8. export PS1  

        拷贝主机/etc目录下的passwd和group文件到etc目录下

        设置HOSTNAME文件

        在etc/sysconfig目录下创建HOSTNAME文件,在文件中写入主机名,我这里写的是fangxin

9>:  安装内核modules

    进入内核源码目录,执行  make modules

    待编译完成后安装modules,执行指令   make modules_install INSTALL_MOD_PATH=/home/fangxin/rootfs 

10>:

打包文件系统   tar -cjvf   rootfs.tar.bz2   rootfs

到这,根文件系统就构建完成了

11>:挂载根文件系统

将SD卡插入Ubuntu环境下,挂载SD卡

 cat /proc/partitions  插卡SD卡是否识别如下

fangxin@fangxin:~/busybox-1.28.4$ cat /proc/partitions
major minor  #blocks  name

 259        4    1024000 nvme0n1p4
   8        0  976762584 sda
   8        1     524288 sda1
   8       16    7639040 sdb

   8       17    7618560 sdb1

挂载SD卡

sudo fdisk /dev/sdb

p  ->  查看分区

u -> 切换到sector模式 ,按u然后回车,重复操作直至切换到sector模式。

d -> 删除分区

n -> 新建分区

        输入"+20M",指定该分区的起始位置是20M的位置上 

       回车默认分区在最后位置结束

w -> 按w然后回车,即可保存分区信息

使用mkfs命令格式化新创建的分区,对于移动设备,可以考虑使用ext3或者ext4文件系统,指令如下:

sudo  mkfs.ext4  /dev/sdb1   (sudo  mkfs.ext3  /dev/sdb1)

由于本人之前制作好的根文件系统是个压缩包,故直接解压到该分区即可

  1. sudo mount /dev/sdb1 /mnt  
  2. sudo tar jxf rootfs.tar.bz2 -C /mnt  
  3. sudo mv /mnt/rootfs/* /mnt  
  4. sudo rm /mnt/rootfs  
  5. sudo umount /mnt

至此,就完成了根文件系统的制作

 配置uboot环境变量

  1. setenv bootargs 'noinitrd console=ttymxc0,115200 root=/dev/mmcblk1p1 rw init=/linuxrc'  
  2. setenv bootcmd 'mmc dev 0; mmc read 0x11ffffc0 0x800 0x5000; mmc read 0x18000000 0x5000 0x800; bootm 0x11ffffc0 - 0x18000000'  
  3. saveenv  

uboot 参数说明

https://www.cnblogs.com/dyllove98/archive/2013/07/11/3184782.html

root=/dev/mmcblk1p1 

mmc read 0x11ffffc0 0x800 0x5000   ->  0x800 表示内核从SD卡1M 位置开始读取 ,0x5000表示连续读取 10M

制作完文件系统后,发现用ls 命令的时候,文件名显示有乱码,需要输入以下命令

alias ls='ls --color=never'

alias ll='ls -la --color=never'

参考原文网址如下:

http://wangfeng0817.blog.163.com/blog/static/477385032012712777995/

setenv bootcmd 'mmc dev 1 0; mmc read 0x12000000 0x800 0x4000; mmc read 0x18000000 0x5000 0x800; bootz 0x12000000 - 0x18000000'

setenv bootargs 'init=/linuxrc console=ttymxc0,115200 root=/dev/mmcblk0p1 rw'

alias ls='ls --color=nerver'

alias ll='ls -la --color=never'

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值