基(ji)于ARM開發板的SD卡掛載及后(hou)臺程序(xu)自啟動
時(shi)間(jian):2018-03-14 來源:SD卡掛(gua)載及(ji)后(hou)臺(tai)程序(xu)自啟動(dong)講(jiang)解
1.SD卡(ka)驅動的移植
【實驗步驟】
①修改設備樹(shu)文件(jian)
$ 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
③編譯內核和(he)設備樹
$ make uImage
$ make dtbs
④測試:
拷(kao)貝內核和(he)設備樹文件(jian)到(dao)/tftpboot目錄下(xia)
$ cp arch/arm/boot/uImage /tftpboot
$ cp arch/arm/boot/dts/exynos4412-fs4412.dtb /tftpboot/
啟動開(kai)發(fa)板會有如下內容顯示:
[ 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 為分區名)
掛載,注意不要(yao)掛在EMMC的分(fen)區
$ mount /dev/mmcblk1p1 /mnt
查看(kan)/mnt/目錄(lu)即可看(kan)到sd卡中內容
2.拷貝我們的(de)(de)應用程序及(ji)所需庫的(de)(de)到SD卡

3.在/source/rootfs下添(tian)加start.sh腳本文(wen)件,首(shou)先配置(zhi)我們(men)QT的(de)(de)移植的(de)(de)相關(guan)參(can)數(shu)配置(zhi),再(zai)mount /dev/mmcblk1p1 /mnt,然(ran)后加載我們(men)QT程(cheng)序(xu)所需要的(de)(de)LCD驅動和gt818的(de)(de)觸摸(mo)屏(ping)的(de)(de)驅動,然(ran)后執行我們(men)所需要執行的(de)(de)程(cheng)序(xu)


4.在(zai)/source/rootfs/etc/profile下(xia)添加source start.sh讓我們的start.sh生效

3. ramdisk.img的制作
①制作一個大小(xiao)(xiao)為8M的(de)鏡像文(wen)件(du -sh 查看文(wen)件系(xi)統的(de)大小(xiao)(xiao))
$ cd ~
$ dd if=/dev/zero of=ramdisk bs=1k count=8192 (ramdsik為8M)
②格(ge)式化(hua)這(zhe)個鏡像文件為ext2
$ mkfs.ext2 -F ramdisk
③在mount下(xia)面創建initrd目錄(lu)作為掛(gua)載點(dian)
$ sudo mkdir /mnt/initrd
④將這(zhe)個磁盤(pan)鏡像(xiang)文件掛載(zai)到/mnt/initrd下(xia)
注意這里(li)的ramdisk不(bu)能存放在rootfs目錄中
$ sudo mount -t ext2 ramdisk /mnt/initrd
⑤將測試好的文件(jian)系統里(li)的內容(rong)全部拷貝到 /mnt/initrd目錄下(xia)面(mian)
$ 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
⑧格式(shi)化為uboot識別的格式(shi)并拷貝到/tftpboot下
$ mkimage -n "ramdisk" -A arm -O linux -T ramdisk -C gzip -d ramdisk.gz ramdisk.img
$ cp ramdisk.img /tftpboot
⑨配(pei)置(zhi)內核(he)支持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
重新編(bian)譯內(nei)核,復制到(dao)/tftpboot
⑩在U-BOOT命令行重新(xin)設置啟動(dong)參數:
# setenv bootcmd tftp 41000000 uImage\;tftp 42000000 exynos4412-fs4412.dtb\;tftp 43000000 ramdisk.img\;bootm 41000000 43000000 42000000
# saveenv
重新啟(qi)動開發板查看能(neng)否正(zheng)常啟(qi)動