讲师博文
基于ARM开发板的SD卡挂载及后台程序自启动 来源 : SD卡挂载及后台程序自启动讲解     2018-03-14

1.SD卡驱动的移植

【实验步骤】

①修改设备树文件

$ vim arch/arm/boot/dts/exynos4412-fs4412.dts

修改
sdhci@12530000 {
       bus-width = <4>;
       pinctrl-0 = <&sd2_clk &sd2_cmd &sd2_bus4 &sd2_cd>;
       pinctrl-names = "default";
       vmmc-supply = <&mmc_reg>;
       status = "okay";
       };

为:
sdhci@12530000 {
       bus-width = <4>;
       pinctrl-0 = <&sd2_clk &sd2_cmd &sd2_bus4>;
       cd-gpios = <&gpx0 7 0>;
       cd-inverted =  <0>;
       pinctrl-names = "default";
       /*vmmc-supply = <&mmc_reg>;*/
       status = "okay";
       };

②配置内核
$ make menuconfig
Device Drivers  --->
       <*> MMC/SD/SDIO card support  --->
              <*>   Secure Digital Host Controller Interface support
              <*>   SDHCI support on Samsung S3C SoC
File systems  --->
       DOS/FAT/NT Filesystems  --->
              <*> MSDOS fs support
              <*> VFAT (Windows-95) fs support
              (437) Default codepage for FAT
              (iso8859-1) Default iocharset for FAT
       -*- Native language support  --->
              <*>   Codepage 437 (United States, Canada)
              <*>   Simplified Chinese charset (CP936, GB2312)
              <*>   ASCII (United States)
              <*>   NLS ISO 8859-1  (Latin 1; Western European Languages)
                     <*>   NLS UTF-8

③编译内核和设备树

$ make uImage

$ make dtbs

④测试:

拷贝内核和设备树文件到/tftpboot目录下

$ cp arch/arm/boot/uImage /tftpboot

$ cp arch/arm/boot/dts/exynos4412-fs4412.dtb /tftpboot/

启动开发板会有如下内容显示:

[ 1.620000] mmc0: new high speed SDHC card at address cd6d

[ 1.625000] mmcblk1: mmc0:cd6d SE08G 7.28 GiB

[ 1.630000] mmcblk1: p1(mmcblk1 为设备名 p1 为分区名)

挂载,注意不要挂在EMMC的分区

$ mount /dev/mmcblk1p1 /mnt

查看/mnt/目录即可看到sd卡中内容

2.拷贝我们的应用程序及所需库的到SD卡

基于ARM开发板的SD卡挂载及后台程序自启动

3.在/source/rootfs下添加start.sh脚本文件,首先配置我们QT的移植的相关参数配置,再mount /dev/mmcblk1p1 /mnt,然后加载我们QT程序所需要的LCD驱动和gt818的触摸屏的驱动,然后执行我们所需要执行的程序

基于ARM开发板的SD卡挂载及后台程序自启动

基于ARM开发板的SD卡挂载及后台程序自启动

4.在/source/rootfs/etc/profile下添加source start.sh让我们的start.sh生效

基于ARM开发板的SD卡挂载及后台程序自启动

3. ramdisk.img的制作

①制作一个大小为8M的镜像文件(du -sh 查看文件系统的大小)

$ cd ~

$ dd if=/dev/zero of=ramdisk bs=1k count=8192 (ramdsik为8M)

②格式化这个镜像文件为ext2

$ mkfs.ext2 -F ramdisk

③在mount下面创建initrd目录作为挂载点

$ sudo mkdir /mnt/initrd

④将这个磁盘镜像文件挂载到/mnt/initrd下

注意这里的ramdisk不能存放在rootfs目录中

$ sudo mount -t ext2 ramdisk /mnt/initrd

⑤将测试好的文件系统里的内容全部拷贝到 /mnt/initrd目录下面

$ sudo cp /source/rootfs/* /mnt/initrd –a

cp /* /mnt/initrd –a

⑥卸载/mnt/initrd

$ sudo umount /mnt/initrd

⑦压缩ramdisk为ramdisk.gz

$ gzip --best -c ramdisk > ramdisk.gz

⑧格式化为uboot识别的格式并拷贝到/tftpboot下

$ mkimage -n "ramdisk" -A arm -O linux -T ramdisk -C gzip -d ramdisk.gz ramdisk.img

$ cp ramdisk.img /tftpboot

⑨配置内核支持RAMDISK

制作完 initrd.img.gz后,需要配置内核支持RAMDISK作为启动文件系统
make menuconfig
File systems  --->
       <*> Second extended fs support
Device Drivers
       SCSI device support  --->
              <*> SCSI disk support
       Block devices  --->
              <*>RAM  block  device  support  
              (16)Default number of RAM disks 
              (8192) Default RAM disk size (kbytes)   (修改为8M)
General setup  --->
              [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support

重新编译内核,复制到/tftpboot

⑩在U-BOOT命令行重新设置启动参数:

# setenv bootcmd tftp 41000000 uImage\;tftp 42000000 exynos4412-fs4412.dtb\;tftp 43000000 ramdisk.img\;bootm 41000000 43000000 42000000

# saveenv

重新启动开发板查看能否正常启动

扫码申领本地嵌入式教学实录全套视频及配套源码

上一篇:Linux 内核驱动 - ADC 驱动

下一篇:半导体器件——MOS管

400-611-6270

Copyright © 2004-2024 华清远见教育科技集团 版权所有
京ICP备16055225号-5京公海网安备11010802025203号