SD卡烧写Linux kernel——SD卡分区,并烧写uboot,kernel,DTB及filesystem
来源:http://www.tudoupe.com时间:2022-01-30
Ubuntu18.04下对SD卡分区,并烧写uboot,kernel,DTB及filesystem
- 一、对于U-Boot启动内核的小知识
- 1、对于启动文件的理解
- 2、对于存储介质的理解
- 3、对于启动的理解
- 4、对于文件类型的理解
- 二、Ubuntu18.04下对SD卡分区
- 1、将读卡器挂接到虚拟机,使用如下指令之一找到自己盘符
- 2、对SD卡进行分区[^3]
- 3、格式化分区
- 三、烧写uboot,kernel,DTB及filesystem
- 1、烧写uboot
- 2、复制kernel和DTB
- 3、复制fs
- 四、启动exynos4412
一、对于U-Boot启动内核的小知识
1、对于启动文件的理解
有了设备树之后(Kernel-3.x加入设备树),嵌入式Linux开发一般需要四个文件:Bootloader(Uboot)、Kernel(uImage)、设备树(DTB)、根文件系统(rootfs)。
2、对于存储介质的理解
一般开发板上有多个存储介质,如:内存(NorFlash、SDRAM),大容量Flash(Nand Flash、SD卡等),网络也算特殊的一种。
Bootloader(Uboot)、Kernel(uImage)、设备树(DTB)、根文件系统(rootfs)这四个文件,理论上可以放在板上的任一存储介质里面。但由于一些特殊原因,往往有所限制。比如,Nor Flash比较小,一般只放Uboot,放不下rootfs。
因此,一般常见的方式是把Uboot放在Nor Flash或者SDRAM,其它的放在Nand Flash,就像JZ2440;或者全都放在SD卡,就像Ti的AM437X;又或者都放在emmc,像Tiny4412;总之就是以上的存储介质组合,根据实际情况而定。1
3、对于启动的理解
开发板上电后,先执行内部ROM中的固化代码,初始化时钟、总线等一些必要的东西。然后根据启动引脚的电平,读取相应的存储介质上的Uboot到RAM。接着,启动Uboot。U-Boot再根据用户传的参数加载内核、设备树、根文件系统。
4、对于文件类型的理解
Linux支持的文件系统以不同的介质来分类,如下所示2:
? 磁盘
FAT16、 FAT16、FAT32、NTFS、ext、ext2 、ext3、ext4
? 光盘
ISO9660、
? Flash
jffs2, yaffs, yaffs2、cramfs, romfs
? 内存
Ramdisk、tmpfs & ramfs
? 虚拟
rootfs、proc、sysfs、usbfs、devpts、NFS
所以,在移植跟文件系统的时候要考虑存储介质的类型。
二、Ubuntu18.04下对SD卡分区
1、将读卡器挂接到虚拟机,使用如下指令之一找到自己盘符
我的盘符是/dev/sdb
2、对SD卡进行分区3
sudo fdisk /dev/sdb
,回车输入n,p,1。其中,p是指主分区,1是指第一个分区。输入起始扇区2048和结束扇区22528,完成了添加第一个分区,该分区占用的空间为SD卡第2048~22528扇区共10M,用来存放kernel image和DTB。
继续按照上述步骤,回车输入n,p,2。输入起始扇区24576和结束扇区1253376,添加第二个分区。该分区占用的空间为SD卡第24576~1253376扇区共600M,用来存放rootfs。
添加完成后执行w保存退出fdisk。
分区结束cat /proc/partitions,可以看到三个sdb,分别是/dev/sdb,/dev/sdb1,/dev/sdb2
3、格式化分区
输入mkfs.vfat /dev/sdb1将第1个分区格式化成fat。
输入mkfs -t ext4 /dev/sdb2将第二个分区格式化成ext2,ext3或者ext4。
三、烧写uboot,kernel,DTB及filesystem
1、烧写uboot
本质上用dd
命令烧写。我是用Samsung提供的烧写脚本,自动烧写的。不会影响其他分区里的文件。原理请参考以下博文:
Ubuntu18.04烧录U-Boot时格式化SD卡的文件类型(RAW 格式)
2、复制kernel和DTB
思路是在/mnt目录下新建2个文件夹/mnt/sd1和/mnt/sd2,然后挂载分别挂载/dev/sdb1和/dev/sdb2。再分别把uImage、DTB和rootfs复制到/mnt/sd1和/mnt/sd2中。最后解挂。
3、复制fs
思路是在/mnt目录下新建2个文件夹/mnt/sd1,然后挂载挂载SD卡分区。先查看SD卡分区的设备名称,然后挂载,再复制,最后解挂。
我对SD卡做了3个分区,用cat /proc/partitions
,可以看到三个sdb,分别是/dev/sdb,/dev/sdb1,/dev/sdb2,/dev/sdb3
。看官根据自己的实际情况,也可能是/dev/sdc、/dev/sdd等。
用ls /mnt/sd1
就可以看到根文件系统中的目录了。
四、启动exynos4412
把SD卡插入exyno4412开发板,设置启动引脚为SD卡启动。上电以后,就可以启动u-boot。通过cuteCom串口助手,输入u-boot命令,设置u-boot的环境变量,然后tftp下载Linux内核和设备树,bootm
命令启动内核从SD卡挂载根文件系统。
各位看官根据自己的实际情况修改bootargs参数中的root=/dev/mmcblk0p3
。
Exynos4412——SD卡启动 ↩︎
嵌入式Linux系统移植的四大步骤 ↩︎
在Exynos4412上使用SD卡烧写Linux ↩︎
相关新闻
- 2023-05-07 2021最好用的电脑系统(2021年电脑系
- 2023-05-07 小白pe重装系统(小白一键重装系统
- 2023-05-07 win10系统下载到u盘(win10系统下载到
- 2023-05-07 win10电脑版下载(WIN10电脑分区)
- 2023-05-07 大白菜官网网址(大白菜pe官网)
- 2023-05-07 u盘做系统盘(电脑u盘怎么重装系统
- 2023-05-07 手机版win10系统免费版(win10系统下载
- 2023-05-07 u盘不能使用(u盘不能使用名称)
- 2023-05-07 pe内置软件添加工具(winpe内置软件添
- 2023-05-07 电脑用u盘怎么重装系统(电脑用u盘
|
|
|
|
|
|
|
|
|
|