<(可选)-flash> <(可选)-ddrsize>用法示例:sudo ./imx6mks..._i.mx6ull rootfs烧写sd">
当前位置:   article > 正文

imx6ull开发板SD卡烧录方式---援引正点原子_i.mx6ull rootfs烧写sd

i.mx6ull rootfs烧写sd
  1. #! /bin/sh
  2. #I.MX6 SD卡启动系统烧写脚本
  3. #版本v1.0
  4. #Author:ALIENTEK
  5. VERSION="1.0"
  6. #打印用法
  7. usage ()
  8. {
  9. echo "
  10. 用法: `basename $1` [选项] <(必选)-device> <(可选)-flash> <(可选)-ddrsize>
  11. 用法示例:
  12. sudo ./imx6mksdboot.sh -device /dev/sdd
  13. sudo ./imx6mksdboot.sh -device /dev/sdd -flash emmc -ddrsize 512
  14. 命令选项:
  15. -device SD卡块设备节点 (例如/dev/sdx)
  16. -flash 请选择开发板Flash类型(emmc | nand)
  17. -ddrsize 请选择DDR大小 (512 | 256)
  18. 可选选项:
  19. --version 打印版本信息.
  20. --help 打印帮助信息.
  21. "
  22. exit 1
  23. }
  24. #Uboot默认值
  25. Uboot='u-boot-imx6ull-14x14-ddr512-emmc.imx'
  26. #execute执行语句成功与否打印
  27. execute ()
  28. {
  29. $* >/dev/null
  30. if [ $? -ne 0 ]; then
  31. echo
  32. echo "错误: 执行 $*"
  33. echo
  34. exit 1
  35. fi
  36. }
  37. #打印版本信息
  38. version ()
  39. {
  40. echo
  41. echo "`basename $1` version $VERSION"
  42. echo "I.MX6 SD卡制卡脚本"
  43. echo
  44. exit 0
  45. }
  46. #判断参数个数
  47. arg=$#
  48. if [ $arg -ne 6 ];then
  49. number=1
  50. while [ $# -gt 0 ]; do
  51. case $1 in
  52. --help | -h)
  53. usage $0
  54. ;;
  55. -device) shift; device=$1; shift; ;;
  56. --version) version $0;;
  57. *) copy="$copy $1"; shift; ;;
  58. esac
  59. done
  60. #判断字符串是否为零
  61. test -z $device && usage $0
  62. echo ""
  63. echo "根据下面的提示,补全缺省的参数-flash -ddrsize"
  64. read -p "请选择开发板参数,输入数字1~4,按Enter键确认
  65. 1.-flash emmc,-ddrsize 512
  66. 2.-flash emmc,-ddrsize 256
  67. 3.-flash nand,-ddrsize 512
  68. 4.-flash nand,-ddrsize 256
  69. 输入数字1~4(default 1): " number
  70. if [ -z $number ];then
  71. echo "使用默认参数:EMMC版本,DDR大小为512MB"
  72. else
  73. case $number in
  74. 1) echo '您已经选择开发板参数为:EMMC版本,DDR大小为512MB'
  75. Uboot='u-boot-imx6ull-14x14-ddr512-emmc.imx'
  76. ;;
  77. 2) echo '您已经选择开发板参数为:EMMC版本,DDR大小为256MB'
  78. Uboot='u-boot-imx6ull-14x14-ddr256-emmc.imx'
  79. ;;
  80. 3) echo '您已经选择开发板参数为:NAND FLASH版本,DDR大小为512MB'
  81. Uboot='u-boot-imx6ull-14x14-ddr512-nand-sd.imx'
  82. ;;
  83. 4) echo '您已经选择开发板参数为:NAND FLASH版本,DDR大小为256MB'
  84. Uboot='u-boot-imx6ull-14x14-ddr256-nand-sd.imx'
  85. ;;
  86. *) echo '输入的参数有误,退出制卡';exit;
  87. ;;
  88. esac
  89. fi
  90. else
  91. #命令行处理,根据选项获得参数
  92. while [ $# -gt 0 ]; do
  93. case $1 in
  94. --help | -h)
  95. usage $0
  96. ;;
  97. -device) shift; device=$1; shift; ;;
  98. -flash) shift; flash=$1; shift; ;;
  99. -ddrsize) shift; ddrsize=$1; shift; ;;
  100. --version) version $0;;
  101. *) copy="$copy $1"; shift; ;;
  102. esac
  103. done
  104. if [ $flash = "emmc" -a $ddrsize = "512" ];then
  105. Uboot='u-boot-imx6ull-14x14-ddr512-emmc.imx'
  106. echo '您已经选择开发板参数为:EMMC版本,DDR大小为512MB'
  107. elif [ $flash = "emmc" -a $ddrsize = "256" ];then
  108. Uboot='u-boot-imx6ull-14x14-ddr256-emmc.imx'
  109. echo '您已经选择开发板参数为:EMMC版本,DDR大小为256MB'
  110. elif [ $flash = "nand" -a $ddrsize = "512" ];then
  111. Uboot='u-boot-imx6ull-14x14-ddr512-nand-sd.imx'
  112. echo '您已经选择开发板参数为:NAND FLASH版本,DDR大小为512MB'
  113. elif [ $flash = "nand" -a $ddrsize = "256" ];then
  114. Uboot='u-boot-imx6ull-14x14-ddr256-nand-sd.imx'
  115. echo '您的开发板参数为:NAND FLASH版本,DDR大小为256MB'
  116. else
  117. echo '参数有误!'
  118. usage $0
  119. fi
  120. fi
  121. #测试制卡包当前目录下是否缺失制卡所需要的文件
  122. sdkdir=$PWD
  123. if [ ! -d $sdkdir ]; then
  124. echo "错误: $sdkdir目录不存在"
  125. exit 1
  126. fi
  127. if [ ! -f $sdkdir/filesystem/*.tar.* ]; then
  128. echo "错误: $sdkdir/filesystem/下找不到文件系统压缩包"
  129. exit 1
  130. fi
  131. if [ ! -f $sdkdir/boot/zImage ]; then
  132. echo "错误: $sdkdir/boot/下找不到zImage"
  133. exit 1
  134. fi
  135. #判断选择的块设备是否存在及是否是一个块设备
  136. if [ ! -b $device ]; then
  137. echo "错误: $device 不是一个块设备文件"
  138. exit 1
  139. fi
  140. #这里防止选错设备,否则会影响Ubuntu系统的启动
  141. if [ $device = '/dev/sda' ];then
  142. echo "请不要选择sda设备,/dev/sda通常是您的Ubuntu硬盘!
  143. 继续操作你的系统将会受到影响!脚本已自动退出"
  144. exit 1
  145. fi
  146. echo "即将进行制作SD系统启动卡,大约花费几分钟时间,请耐心等待!"
  147. echo "************************************************************"
  148. echo "* 注意:这将会清除$device所有的数据 *"
  149. echo "* 在脚本执行时请不要将$device拔出 *"
  150. echo "* 请按<Enter>确认继续 *"
  151. echo "************************************************************"
  152. read enter
  153. #格式化前要卸载
  154. for i in `ls -1 $device?`; do
  155. echo "卸载 device '$i'"
  156. umount $i 2>/dev/null
  157. done
  158. #执行格式化$device
  159. execute "dd if=/dev/zero of=$device bs=1024 count=1024"
  160. #第一个分区为64M用来存放设备树与内核镜像文件,因为设备树与内核都比较小,不需要太大的空间
  161. #第二个分区为SD卡的总大小-64M,用来存放文件系统
  162. cat << END | fdisk -H 255 -S 63 $device
  163. n
  164. p
  165. 1
  166. +64M
  167. n
  168. p
  169. 2
  170. t
  171. 1
  172. c
  173. a
  174. 1
  175. w
  176. END
  177. #两个分区处理
  178. PARTITION1=${device}1
  179. if [ ! -b ${PARTITION1} ]; then
  180. PARTITION1=${device}1
  181. fi
  182. PARTITION2=${device}2
  183. if [ ! -b ${PARTITION2} ]; then
  184. PARTITION2=${device}2
  185. fi
  186. #第一个分区创建为Fat32格式
  187. echo "格式化 ${device}1 ..."
  188. if [ -b ${PARTITION1} ]; then
  189. mkfs.vfat -F 32 -n "boot" ${PARTITION1}
  190. else
  191. echo "错误: /dev下找不到 SD卡 boot分区"
  192. fi
  193. #第二个分区创建为ext4格式
  194. echo "格式化${device}2 ..."
  195. if [ -b ${PARITION2} ]; then
  196. mkfs.ext4 -F -L "rootfs" ${PARTITION2}
  197. else
  198. echo "错误: /dev下找不到 SD卡 rootfs分区"
  199. fi
  200. while [ ! -e $device ]
  201. do
  202. sleep 1
  203. echo "wait for $device appear"
  204. done
  205. echo "正在烧写${Uboot}${device}"
  206. execute "dd if=$sdkdir/boot/$Uboot of=$device bs=1024 seek=1 conv=fsync"
  207. sync
  208. echo "烧写${Uboot}${device}完成!"
  209. echo "正在准备复制..."
  210. echo "正在复制设备树与内核到${device}1,请稍候..."
  211. execute "mkdir -p /tmp/sdk/$$"
  212. execute "mount ${device}1 /tmp/sdk/$$"
  213. execute "cp -r $sdkdir/boot/*${flash}*.dtb /tmp/sdk/$$/"
  214. execute "cp -r $sdkdir/boot/zImage /tmp/sdk/$$/"
  215. #execute "cp $sdkdir/boot/alientek.bmp /tmp/sdk/$$/"
  216. sync
  217. echo "复制设备树与内核到${device}1完成!"
  218. if [ "$copy" != "" ]; then
  219. echo "Copying additional file(s) on ${device}p1"
  220. execute "cp -r $copy /tmp/sdk/$$"
  221. fi
  222. echo "卸载${device}1"
  223. execute "umount /tmp/sdk/$$"
  224. sleep 1
  225. #解压文件系统到文件系统分区
  226. #挂载文件系统分区
  227. execute "mkdir -p /tmp/sdk/$$"
  228. execute "mount ${device}2 /tmp/sdk/$$"
  229. echo "正在解压文件系统到${device}2 ,请稍候..."
  230. rootfs=`ls -1 filesystem/*.tar.*`
  231. execute "tar jxfm $rootfs -C /tmp/sdk/$$"
  232. sync
  233. echo "解压文件系统到${device}2完成!"
  234. echo "正在解压模块到${device}2/lib/modules/ ,请稍候..."
  235. modules=`ls -1 modules/*.tar.*`
  236. execute "tar jxfm $modules -C /tmp/sdk/$$/lib/modules/"
  237. sync
  238. echo "解压模块到${device}2/lib/modules/完成!"
  239. echo "卸载${device}2"
  240. execute "umount /tmp/sdk/$$"
  241. execute "rm -rf /tmp/sdk/$$"
  242. sync
  243. echo "SD卡启动系统烧写完成!"

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/688772
推荐阅读
相关标签
  

闽ICP备14008679号