eMMC Q&A
Q1:kernel下如何打开eMMC?
在menuconfig中打开如下配置:
Device Drivers → <M> MMC/SD/SDIO card support ---> → [*] SStar SoC platform drivers -→ → <M> EMMC driver → [*] UNIFY EMMC DRIVER < > SStar SD/MMC Card Interface Support
由于SD与eMMC使用同一组GPIO,使能eMMC Driver则需要失能SD Driver。在kernel/modules目录下会生成kdrv_emmc.ko文件,将kdrv_emmc.ko字段追加到project/kbuild/customize/4.9.84/p3/dispcam kernel_mod_list文件中,此时打包image时才会包含kdrv_emmc.ko文件,开机启动时才会insmod kdrv_emmc.ko
Q2:如何使用eMMC或者SD卡作为Linux Swap分区?
-
编译kernel时开启swap功能
-
在kernel目录中执行命令
$ make menuconfig
-
进入General setup选项,开启swap功能,然后保存退出
-
查看.config文件,确认swap功能已开启
-
重新编译kernel,然后烧写至开发板
$ make clean; make -j8
-
-
在eMMC/SD卡上建立swap分区
-
在Linux中使用下列命令查看系统分区情况
# cat /proc/partitions
可以看到我们的系统上有一个120GB,尚未分区的mmcblk0设备。
-
使用fdisk命令创建一个新的swap分区
进入fdisk操作界面:
# fdisk /dev/mmcblk0
执行m指令,可以查看fdisk支持的基本功能:
执行p指令,查看当前分区情况:
可以看到当前mmcblk0尚未分区
依次执行下图中所示指令,创建一个1GB大小的swap分区,最后使用w指令保存并退出fdisk工具:
-
查看新创建的swap分区
-
-
使用mkswap设置swap分区
# mkswap /dev/mmcblk0p1
-
使用swapon开启swap功能
# swapon /dev/mmcblk0p1
-
查看系统内存(包括swap分区)使用情况
# free 或 free -m
可以看到系统中已开启swap功能,swap分区大小约为1GB。
-
让系统开机自动加载swap分区
使用swapon可以手动开启swap功能,使用swapoff可以手动关闭swap功能。若希望Linux启动后自动开启swap功能,则可以通过修改/etc/fstab文件来进行配置:
$ vi /etc/fstab
通过增加一行配置,使Linux启动时自动加载/dev/mmcblk0p1分区作为swap分区。
-
测试swap功能是否正常
我们提供了一个测试程序来检测Linux的swap功能是否正常。该测试程序通过不断申请1MB大小的内存,直至超过系统可用物理内存(测试环境系统可用物理内存大约为70MB,而测试程序会累计申请大约255MB内存)。若系统未开启swap功能,则该测试程序会报out of memory错误并退出;若系统开启了swap功能,则系统会使用swap分区作为内存的扩充空间,该测试程序能够正常执行完。
测试程序的源代码:swap_test.c,交叉编译后可执行swap_test 。
交叉编译示例:
$ arm-linux-gnueabihf-gcc swap_test.c -o swap_test
编译完后,将可执行文件swap_test通过tftp或者其他方式传入开发板中,然后添加可执行权限:
# chmod +x swap_test
查看当前系统内存使用情况:
# free -m
让swap_test在后台运行:
# ./swap_test &
使用free-m命令不断查看当前系统内存使用情况,能够发现可用物理内存在不断减少。可用物理内存快减少到0时,系统开始使用Swap分区来作为内存的补充:
最后,测试程序成功运行完成:
注意事项:由于EMMC与SDIO公用一组pin,如果硬件是参考SDIO电路设计,测试EMMC时需要改为常供电。
...