Linux产品封装发布
SD卡启动设备(本地挂载根文件系统)
把SD卡连接到虚拟机linux中
用linux中的GParted软件分区和格式化
需要先卸载设备挂载才能对设备进行分区操作
格式化为ext4文件系统
把根文件系统拷贝到sd卡
如果sd卡没有自己挂载需要自己手动挂载
用GParted软件或用mount指令
把根文件拷贝到sd卡
sudo cp /home/wbyq/rootfs/* /sd卡目录 -rap
一定要要指令保存属性复制,界面复制对库文件无效。
设置uboot环境变量
setenv bootargs root=/dev/mmcblk0p1 rootfstype=ext4 console=ttySAC0,115200 init=/linuxrc ctp=2 skipcali=y lcd=S702
saveenv
注意mmcblk0p1 k0 表示启动设备 p1表示第一的分区
emmc启动设备(本地挂载根文件系统)
2.1 烧写sd卡中的u-boot到emmc
emmc open 1;movi r f 0 40000000;movi w z f 1 40000000;movi r b 0 40000000;movi w z b 1 40000000;movi r u 0 40000000;movi w z u 1 40000000;movi r t 0 40000000;movi w z t 1 40000000;emmc close 1;
中间不能有空格
2.2 查看EMMC卡基本信息
从emmc启动uboot
TINY4412 > mmcinfo 0
Device: S5P_MSHC4
Manufacturer ID: 15
OEM: 100
Name: M4G1Y
Tran Speed: 0
Rd Block Len: 512
MMC version 4.0 //mmc版本,4.0
High Capacity: Yes
Size: 3728MB (block: 7634944)
Bus Width: 8-bit //数据总线宽度,8位
Boot Partition Size: 2048 KB
2.3 给emmc分区
我们分为3个分区:
TINY4412 > fdisk -c 0 3000 200 200
Count: 10000
Count: 9999
Count: 9998
fdisk is completed
partion # size(MB) block start # block count partition_Id
1 193 7100016 395274 0x0C
2 3000 134244 6145392 0x83
3 200 6279636 410190 0x83
4 200 6689826 410190 0x83
我们在命令下只是输入3个分区大小,得到的这3个分区是exte3格式分区。
2.3 格式化各个分区
格式化第一个分区fat分区,作为系统分区使用:
TINY4412 > fatformat mmc 1:1
..................
TINY4412 >
将第二、三、四分区作为用户分区使用:
TINY4412 > ext3format mmc 1:2
..................
TINY4412 > ext3format mmc 1:3
..................
TINY4412 > ext3format mmc 1:4
..................
TINY4412 >
一定要对emmc进行分区,如果不分区格式化不能启动fastboot
2.4 Uboot启动fastboot
TINY4412 # fastboot
[Partition table on MoviNAND]
ptn 0 name='fwbl1' start=0x1000A len=N/A (use hard-coded info. (cmd: movi))
ptn 1 name='bl2' start=N/A len=N/A (use hard-coded info. (cmd: movi))
ptn 2 name='bootloader' start=N/A len=N/A (use hard-coded info. (cmd: movi))
ptn 3 name='tzsw' start=N/A len=N/A (use hard-coded info. (cmd: movi))
ptn 4 name='kernel' start=N/A len=N/A (use hard-coded info. (cmd: movi))
ptn 5 name='ramdisk' start=N/A len=0x6800(~27262976KB) (use hard-coded info. (cmd: movi))
ptn 6 name='system' start=0x1000A len=0x2EE2B8(~-1148526592KB)
ptn 7 name='userdata' start=0x1000A len=0x32127(~210017280KB)
ptn 8 name='cache' start=0x1000A len=0x32127(~210017280KB)
ptn 9 name='fat' start=0x1000A len=0x30405(~202380288KB)
OTG cable Connected!
这时候电脑会把开发板识别为手机。
用micro USB插上开发板与电脑连接,然后桥接到虚拟机linux中
2.5 安装fastboot驱动
有网络的建议自动跟新驱动
fastboot的usb驱动是usb_driver.zip,解压出来。
如果安装过程出现签名不对,那么需要关闭的驱动签名。
如果是Windows 8以上系统,需要关闭驱动数字签名,操作步骤如下:
以管理员方式运行cmd终端,输入以下命令:
bcdedit.exe -set loadoptions DDISABLE_INTEGRITY_CHECKS
使用管理员的身份打开CMD命令行,然后输入上面的命令并执行,完成之后重新启动计算机。
如果安装过程中弹出“Win8安装驱动时提示“哈希值不在指定的目录文件中”;
如下图:
则解决办法如下:
1、Windows键+C,或鼠标屏幕右下角
2、设置→更多电脑设置
3、左边选常规,右下角重新启动
上面3个步骤也可用这个方法替代:
Windows键+R
输入: shutdown.exe /r /o /f /t 00
然后点击“确定”(注意确定后系统会重启)
4、等几秒钟会出现三个选项,选择疑难解答
5、高级选项→启动设置→重启
6、重启的时候就出来安全模式列表→选择“禁用强制驱动程序”。
OK,重新开机后,驱动程序可以正常安装。
2.6 烧写emmc
桥接到linux 虚拟机中
在虚拟机linux终端中输入命令
sudo fastboot devices //查看fastboot设备
SMDKEXYNOS-01 fastboot
烧写BL1
sudo fastboot flash fwbl1 /home/wbyq/E4412_N.bl1.bin //路径根据自己的实际位置填写
..................
烧写BL2
sudo fastboot flash bl2 /home/wbyq/bl2.bin //路径根据自己的实际位置填写
..................
烧写uboot
sudo fastboot flash bootloader /home/wbyq/u-boot.bin //路径根据自己的实际位置填写
..................
烧写uboot加密文件
sudo fastboot flash tzsw /home/wbyq/E4412_tzsw.bin //路径根据自己的实际位置填写
..................
烧写内核
sudo fastboot flash kernel /home/wbyq/zImage //路径根据自己的实际位置填写
..................
制作根文件系统压缩包
sudo make_ext4fs -s -l 3000M /home/wbyq/rootfs.ext4 /home/wbyq/rootfs
make_ext4fs命令行解释:
语法:make_ext4fs -s -l <长度> <输出> <目录>
-s 表示制作压缩型的镜像(sparse_image_file),这个参数很重要,不然如果不压缩,data分区有5Gb大小,刷不进手机;
-l <长度> ,指定分区的大小;
烧写根文件包
sudo fastboot flash system /home/wbyq/rootfs.ext4 //路径根据自己的实际位置填写
..................
烧写完成
从emmc启动uboot设置环境变量
TINY4412 # setenv bootargs root=/dev/mmcblk0p2 rootfstype=ext4 cnotallow=ttySAC0,115200 init=/linuxrc ctp=2 skipcali=y lcd=S702
TINY4412 # save
mmcblk0p2这个参数很重要:
k0表示启动的设备
p2表示第二块分区
至此sd卡和emmc都能用直接启动。
三、EMMC挂载方式二
1. 下面代码将SD卡的内核与U-BOOT拷贝到EMMC里。
需要设置开发板为SD卡启动,在U-BOOT启动的命令行输入以下代码。
movi r f 0 40000000;emmc open 1;movi w z f 1 40000000;emmc close 1; movi r b 0 40000000;emmc open 1;movi w z b 1 40000000;emmc close 1; movi r u 0 40000000;emmc open 1;movi w z u 1 40000000;emmc close 1; movi r t 0 40000000;emmc open 1;movi w z t 1 40000000;emmc close 1; movi r k 0 40000000;movi w k 1 40000000; |
注意:完成了上面步骤---以下开发板都从EMMC启动-->:
2. 格式化EMMC为ext3
fdisk -c 0 320 2057 520 fatformat mmc 0:1 ext3format mmc 0:2 ext3format mmc 0:3 ext3format mmc 0:4 |
3. 为了把文件系统烧写到EMMC的第三个分区,先回到虚拟机里,把根文件系统打包为压缩文件。
[xiaolong@localhost XL4412_root]# tar -cf all.tar ./* |
4. 因为需要在虚拟机里拷贝文件系统压缩包到emmc的第三分区,所以需要先用网络方式挂载文件系统,修改uboot中的bootargs环境变量。
set bootargs root=/dev/nfs nfsroot=192.168.18.3:/work_User/BUSYBOX/XL4412_root ip=192.168.18.123:192.168.18.3:192.168.18.1:255.255.255.0::eth0:off init=/linuxrc cnotallow=ttySAC0 lcd=s70 |
设置完环境变量记得保存,saveenv
- 开发板从EMMC卡启动,复位开发板,引导内核启动,挂载文件系统。
- 把EMMC第三分区(/dev/mmcblk0p3)挂载到/mnt目录下。
Xiaolong /# mount /dev/mmcblk0p3 /mnt |
7.拷贝压缩之后的文件系统到emmc第三个分区。
进入到mnt目录里,拷贝之前压缩的文件系统压缩包。
Xiaolong /mnt# cp /all.tar ./ |
8.拷贝成功后,解压压缩包
Xiaolong /mnt# tar xvf all.tar |
9.解压成功后,设置bootargs启动路径
set bootargs noinitrd root=/dev/mmcblk0p3 rootfstype=ext3 cnotallow=ttySAC0,115200 init=/linuxrc ctp=2 lcd=S70 |
- 拔掉网线,设置开发板从EMMC启动,复位开发板。观察串口打印的信息,是否成功挂载文件系统。