當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > 基于ARM開發(fā)板的SD卡掛載及后臺(tái)程序自啟動(dòng)
1.SD卡驅(qū)動(dòng)的移植
【實(shí)驗(yàn)步驟】
①修改設(shè)備樹文件
$ 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";
};
②配置內(nèi)核
$ 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
③編譯內(nèi)核和設(shè)備樹
$ make uImage
$ make dtbs
④測試:
拷貝內(nèi)核和設(shè)備樹文件到/tftpboot目錄下
$ cp arch/arm/boot/uImage /tftpboot
$ cp arch/arm/boot/dts/exynos4412-fs4412.dtb /tftpboot/
啟動(dòng)開發(fā)板會(huì)有如下內(nèi)容顯示:
[ 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 為設(shè)備名 p1 為分區(qū)名)
掛載,注意不要掛在EMMC的分區(qū)
$ mount /dev/mmcblk1p1 /mnt
查看/mnt/目錄即可看到sd卡中內(nèi)容
2.拷貝我們的應(yīng)用程序及所需庫的到SD卡
3.在/source/rootfs下添加start.sh腳本文件,首先配置我們QT的移植的相關(guān)參數(shù)配置,再mount /dev/mmcblk1p1 /mnt,然后加載我們QT程序所需要的LCD驅(qū)動(dòng)和gt818的觸摸屏的驅(qū)動(dòng),然后執(zhí)行我們所需要執(zhí)行的程序
4.在/source/rootfs/etc/profile下添加source start.sh讓我們的start.sh生效
3. ramdisk.img的制作
①制作一個(gè)大小為8M的鏡像文件(du -sh 查看文件系統(tǒng)的大小)
$ cd ~
$ dd if=/dev/zero of=ramdisk bs=1k count=8192 (ramdsik為8M)
②格式化這個(gè)鏡像文件為ext2
$ mkfs.ext2 -F ramdisk
③在mount下面創(chuàng)建initrd目錄作為掛載點(diǎn)
$ sudo mkdir /mnt/initrd
④將這個(gè)磁盤鏡像文件掛載到/mnt/initrd下
注意這里的ramdisk不能存放在rootfs目錄中
$ sudo mount -t ext2 ramdisk /mnt/initrd
⑤將測試好的文件系統(tǒng)里的內(nèi)容全部拷貝到 /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識(shí)別的格式并拷貝到/tftpboot下
$ mkimage -n "ramdisk" -A arm -O linux -T ramdisk -C gzip -d ramdisk.gz ramdisk.img
$ cp ramdisk.img /tftpboot
⑨配置內(nèi)核支持RAMDISK
制作完 initrd.img.gz后,需要配置內(nèi)核支持RAMDISK作為啟動(dòng)文件系統(tǒng)
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
重新編譯內(nèi)核,復(fù)制到/tftpboot
⑩在U-BOOT命令行重新設(shè)置啟動(dòng)參數(shù):
# setenv bootcmd tftp 41000000 uImage\;tftp 42000000 exynos4412-fs4412.dtb\;tftp 43000000 ramdisk.img\;bootm 41000000 43000000 42000000
# saveenv
重新啟動(dòng)開發(fā)板查看能否正常啟動(dòng)