完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
4个回答
|
|
准备
a). ApalisiMX6Q ARM核心版配合ApalisEvaluation Board载板,连接调试串口UART1(载板X29)到开发主机方便调试。更多关于Apalis iMX6配合Apalis Evaluation Board载板的说明请参考Datasheet和开发上手指南。 b). 开发Linux PC主机, 用于搭建Ycoto Project/OpenEmbedded 编译环境,方便编译针对Apalis iMX6Q的集成所需功能的测试Linux image。 |
|
|
|
编译集成dm-crypt的Linuximage
a). 首先根据下面文章的描述在Linux开发主机上面配置Ycoto Project/OpenEmbedded编译环境 https://developer.toradex.cn/knowledge-base/board-support-package/openembedded-(core) 本文配置使用 LinuxImageV2.8 分支。 b). 配置Linux kernel,增加dm-crypt的支持 ----------------------- $ cd oe-core/build $ make -c menuconfig virtual/kernel Device Drivers --->
|
|
|
|
测试加密数据分区(非rootfs启动分区)
a). 进入上一步骤更新好的Apalis iMX6 Linux系统串口终端,首先准备用于加密的分区,可以是实际的物理分区(如外部USB盘,SD卡或者sata硬盘等),也可以通过dd 命令在现有eMMC Linux 分区上面创建一个分区块,其后续加密操作都是类似的,本文就以后者作为演示。 b). 具体操作流程如下: ----------------------- # 在$HOME 目录下创建用于测试的分区块,100MB容量 root@apalis-imx6:~# cd /home/root/ root@apalis-imx6:~# dd if=/dev/urandomof=test.luks bs=1M count=100 # 创建加密分区,这里会要求设置加密密码,如果需要调试,可以增加--debug 调试参数 root@apalis-imx6:~# cryptsetup luksFormattest.luks WARNING! ======== This will overwrite data on test.luksirrevocably. Are you sure? (Type uppercase yes): YES Enter passphrase: Verify passphrase: # 可选操作:如果想要实现自动通过脚本挂载,则需要配置key 文件,并添加到加密分区 root@apalis-imx6:~# dd if=/dev/urandomof=key bs=1024 count=4 root@apalis-imx6:~# cryptsetup luksAddKeytest.luks key Enter any existing passphrase: # 打开加密分区 // 手动方式,需要手动输入并验证密码 root@apalis-imx6:~# cryptsetup luksOpentest.luks testvolume Enter passphrase for test.luks: // 通过key 文件自动方式 root@apalis-imx6:~# cryptsetup luksOpen --key-filekey test.luks testvolume # 格式化加密分区 root@apalis-imx6:~# mkfs.ext4 -j/dev/mapper/testvolume mke2fs 1.43.5 (04-Aug-2017) Creating filesystem with 100352 1k blocksand 25168 inodes Filesystem UUID:db13767e-9057-48f2-9908-31a14ec6d02c Superblock backups stored on blocks: 8193, 24577, 40961, 57345, 73729 Allocating group tables: done Writing inode tables: done Creating journal (4096 blocks): done Writing superblocks and filesystemaccounting information: done # 挂载加密分区 root@apalis-imx6:~# mkdir /mnt/test root@apalis-imx6:~# mount/dev/mapper/testvolume /mnt/test/ # 然后就可以进入/mnt/test/ 对加密分区进行操作,操作完成后,解除挂载并关闭加密分区 root@apalis-imx6:/# umount /mnt/test root@apalis-imx6:/# cryptsetup luksClosetestvolume ----------------------- |
|
|
|
测试加密 Rootfs 启动分区
a). 由于Uboot下无法完成对加密启动分区的解密,因此我们需要准备一个最小启动initramfs镜像,uboot加载initramfs启动后再解密并挂载rootfs启动分区,最后切换到这个启动分区来完成整个启动过程 b). 首先还是通过之前配置好的Ycoto环境编译所需的initramfs镜像 ----------------------- # 配置busybox,增加 --install 和 mdev 支持 ./ 添加fragment.cfg 文件到 layers/openembedded-core/meta/recipes-core/busybox/busybox/ 目录,内容如下: https://github.com/simonqin09/crypt_test/blob/master/fragment.cfg ./ 如下修改layers/openembedded-core/meta/recipes-core/busybox/busybox_1.24.1.bb文件 https://github.com/simonqin09/crypt_test/blob/master/busybox.patch ./ 如下修改layers/meta-openembedded/meta-initramfs/recipes-bsp/images/initramfs-debug-image.bb文件 https://github.com/simonqin09/crypt_test/blob/master/initramfs-debug-image.patch # 编译initramfs image $ cd build $ bitbake -k initramfs-debug-image ----------------------- c). 添加key 文件到initramfs image中 ----------------------- # 从生成目录将initramfs image文件复制到PC的工作目录 $ mkdir work-dir $ cd work-dir $ cpdeploy/images/apalis-imx6/Angstrom-initramfs-debug-image-glibc-ipk-v2017.12-apalis-imx6.rootfs.cpio.gz. # 解压cpio.gz文件,并生成随机内容的key文件,为后面加密rootfs启动分区使用 $ mkdir temp $ cd temp $ gunzip -c ../Angstrom-initramfs-debug-image-glibc-ipk-v2017.12-apalis-imx6.rootfs.cpio.gz| cpio -i $ dd if=/dev/urandom of=key bs=1024 count=4 # 重新压缩为cpio.gz 文件 $ find . | cpio -H newc -o | gzip -9 >../initramfs.cpio.gz # 将生成的cpio.gz 文件转换为 uboot 可用的initramfs image $ cd .. $ mkimage -A arm -O linux -T ramdisk -n"Initial Ram Disk" -d initramfs.cpio.gz initramfs.img ----------------------- d). 将生成的 initramfs.img 文件复制到FAT32分区的SD卡上面,连接到Apalis iMX6底板X18 8bit SD插槽。启动Apalis iMX6模块,进入 uboot 命令行,将 initramfs image文件复制到 iMX6 boot 分区并修改启动参数 ----------------------- # 复制initramfs image到boot分区 Apalis iMX6 # mmc rescan Apalis iMX6 # load mmc 1:1${ramdisk_addr_r} initramfs.img Apalis iMX6 # fatwrite mmc 0:1${ramdisk_addr_r} initramfs.img ${filesize} # 修改启动环境变量 ApalisiMX6 # setenv boot_initfs ‘run load_initramfs_files && bootm${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r}’ ApalisiMX6 # setenv load_initramfs_files ‘load mmc 0:1 ${fdt_addr_r} ${fdt_file};load mmc 0:1 ${ramdisk_addr_r} initramfs.img; load mmc 0:1 ${kernel_addr_r} ${boot_file}’ ApalisiMX6 # setenv bootcmd ‘run boot_initfs; echo; echo initramfs_failed; runemmcboot ; echo ; echo emmcboot failed ; run nf***oot ; echo ; echo nf***ootfailed ; u*** start ;setenv stdout serial,vga ; setenv stdin serial,u***kbd’ ApalisiMX6 # saveenv ----------------------- e). 重新启动后,系统会加载到initramfs环境下,然后进行对rootfs 分区进行加密操作 ----------------------- # 加密并挂载rootfs 分区 /dev/mmcblk0p2 / # cryptsetup luksFormat /dev/mmcblk0p2 / # cryptsetup --debug luksAddKey/dev/mmcblk0p2 key / # cryptsetup luksOpen --key-file key/dev/mmcblk0p2 rootfs / # mke2fs -t ext4 /dev/mapper/rootfs / # mkdir -p /mnt/rootfs / # mount /dev/mapper/rootfs /mnt/rootfs # 将rootfs 文件复制到加密启动分区 ./ 首先将前面章节3生成的Linux image文件 Apalis-iMX6_LXDE-Image-Tezi_2.8b6-2019xxxx.tar 解压,并提取 rootfs压缩包到FAT32 SD卡 $ tar xvf Apalis-iMX6_LXDE-Image-Tezi_2.8b6-2019xxxx.tar $ cd Apalis-iMX6_LXDE-Image-Tezi_2.8b6 $ cp Apalis-iMX6_LXDE-Image.rootfs.tar.xz/media/sd (SD卡挂载目录) ./ 然后将SD卡连接到 Apalis iMX6进行挂载 mkdir /mnt/sd / # mount -t vfat /dev/mmcblk1p1 /mnt/sd ./ 最后将SD卡里面的rootfs文件系统压缩包解压到刚才创建并挂载的加密启动分区中 / # cd /mnt/rootfs / # tar Jxf /mnt/sd/Apalis-iMX6_LXDE-Image.rootfs.tar.xz # 卸载并关闭加密启动分区 / # umount /mnt/rootfs / # cryptsetup luksClose rootfs ----------------------- f). 为了实现在initramfs 环境下实现自动解密rootfs启动分区并切换到启动分区加载启动,需要修改initramfs image的 init脚本文件 ----------------------- # 重新解压上面操作c 添加 key文件后生成的 initramfs cpio.gz文件 $ mkdir temp $ cd temp $ gunzip -c ../ initramfs.cpio.gz | cpio -i # 替换init 文件为如下内容 https://github.com/simonqin09/crypt_test/blob/master/init.mod # 重新压缩并转换为uboot 可用的文件 $ find . | cpio -H newc -o | gzip -9 >../initramfs-new.cpio.gz $ cd .. $ mkimage -A arm -O linux -T ramdisk -n"Initial Ram Disk" -d initramfs-new.cpio.gz initramfs.img ----------------------- g). 和上述操作d 同样方法将新的 initramfs.img 文件复制到Apalis iMX6 boot分区后重新启动,系统会正常启动到最初的文件系统了,然后就可以继续进行其他操作了。 ----------------------- U-Boot 2016.11-2.8.6+g83a53c1 (Jul 29 2019- 04:51:51 +0000) cpu: Freescale i.MX6Q rev1.5 at 792 MHz Reset cause: POR I2C: ready DRAM: 2 GiB … Hit any key to stop autoboot: 0 reading imx6q-apalis-eval.dtb 54620 bytes read in 18 ms (2.9 MiB/s) readinginitramfs-key.img 4455676 bytes read in 147 ms (28.9 MiB/s) reading zImage 5483824 bytes read in 163 ms (32.1 MiB/s) ## Loading initRamdisk from Legacy Image at 12200000 ... Image Name: Initial Ram Disk Image Type: ARM Linux RAMDiskImage (gzip compressed) Data Size: 4455612 Bytes = 4.2MiB … Starting kernel ... … [ 3.918790] Freeing unused kernel memory: 1024K [ 4.023894] hub 1-1.1:1.0: USB hub found [ 4.028022] hub 1-1.1:1.0: 4 ports detected [ 8.736558] EXT4-fs (dm-0): couldn't mount as ext3 due to featureincompatibilities [ 8.744787] EXT4-fs (dm-0): couldn't mount as ext2 due to featureincompatibilities [ 8.895730] EXT4-fs (dm-0): recovery complete [ 8.900834] EXT4-fs (dm-0): mounted filesystemwith ordered data mode. Opts: (null) [ 9.345988] systemd[1]: System time before build time, advancing clock. [ 9.415901] systemd[1]: systemd 234 running in system mode. (+PAM -AUDIT-SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP -LIBCRYPTSETUP -GCRYPT -GN) [ 9.437154] systemd[1]: Detected architecture arm. … The Angstrom Distribution apalis-imx6ttymxc0 Angstrom v2017.12 - Kernel Apalis-iMX6_LXDE-Image 2.8b6 20190801 apalis-imx6 login: ----------------------- |
|
|
|
只有小组成员才能发言,加入小组>>
692 浏览 0 评论
1105 浏览 1 评论
2473 浏览 5 评论
2807 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2645 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
652浏览 9评论
649浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
781浏览 6评论
628浏览 5评论
668浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 21:52 , Processed in 0.979656 second(s), Total 84, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号