arm开发板的启动流程 (基于arm平台)

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开发板recovery模式,基于arm架构的jdk

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

arm开发板recovery模式,基于arm架构的jdk

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

arm开发板recovery模式,基于arm架构的jdk

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

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

嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!

分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!

扫码进群领资料

arm开发板recovery模式,基于arm架构的jdk