Pcduino下linux 的Uboot Kenel Roofs 制作烧写(二)-程序员宅基地

技术标签: linux网络编程  linux  uboot  linux内核  驱动开发  

第二阶段部署UBOOT,uImage,rootfsTF卡中

准备一张TF卡,最好是金士顿的TF卡,我一开始用的不是金士顿的卡,总是部署失败,后来我换了一张32G的金士顿TF卡,成功部署!像一般的金士顿1G2G卡也没应该有问题。

1.2.1烧写UBOOTTF

插入TF卡,ubuntu12.04会识别。在驱动文件下可以看到/dev/sdc,文件。有些会识别成/dev/sdb,根据自己的系统把TF卡识别成说明文件名而定。我的是识别成/dev/sdc文件。在部署之前最好把TF卡格式化了,确保里面没有其他数据。

清空TF卡,包括分区表

Sudo dd if=/dev/zero of=/dev/sdc bs=1M count=1 //意思是用0填充sdc的前1M的空间,注意这个命令也可以用来测试磁盘的读写速度。

查看TF卡是否忙碌sudo sfdisk -R /dev/sdc

BLKRRPART: Device or resource busy
This disk is currently in use.

如果出现这个打印语句说明TF已经被挂载,重新插拔一次即可。

磁盘分区:

sudo cat <<EOT | sudo sfdisk --in-order -uM /dev/sdc

回车输入

> 1,16,c
> ,,L
> EOT

这里的116c表示的是从这第一个主分区(sdc)的第1-16M之间的文件系统类型为FAT32,这个cFAT32的类型代码。而下面一行的就表示默认了两个值的大小和这么大(这个主分区1-16M后面的空间)的剩余空间的文件系统类型为LINUX.

root@ubuntu:/# sfdisk -l /dev/sdc   //查看一下分区是否成功

 

Disk /dev/sdc: 30436 cylinders, 64 heads, 32 sectors/track

Units = cylinders of 1048576 bytes, blocks of 1024 bytes, counting from 0

 

  Device Boot Start     End   #cyls   #blocks   Id  System

/dev/sdc1         1      16      16     16384    c  W95 FAT32 (LBA)

/dev/sdc2        17   30435   30419  31149056   83  Linux

/dev/sdc3         0       -       0         0    0  Empty

/dev/sdc4         0       -       0         0    0  Empty

这是我为TF卡分好的区可以清楚的看到1-16M的空间文件系统类型为FAT32,其余的空间文件系统类型为linux

磁盘格式化:

sudo sfdisk -l /dev/sdc //先看看分好不同区磁盘的名字,我的分别是sdc1,sdc2

重新分好区之后为了使dev设备文件可以识别,最好重新插拔TF卡,在dev下可以看到sdc1,sdc2这两个问件,否则在磁盘格式化的时候会提示找不到磁盘。

sudo mkfs.vfat /dev/sdc1   //16Msdc1磁盘格式化为vfat格式,也就是我们经常看见的FAT32格式。

 

sudo mkfs.ext4 /dev/sdc2  //16M以后的空间格式化为ext4格式

TF卡烧写UBOOT.bin文件

先打开uboot文件夹

sudo dd if=spl/sunxi-spl.bin of=/dev/sdc bs=1024 seek=8

sudo dd if=u-boot.bin of=/dev/sdc bs=1024 seek=32

通过A10相关资料,通过以上2条命令烧写spluboot到指定位置,暂时不清楚如何确定这2个读取位置.

1.2.2烧写linux内核

制作对对A10芯片进行配置的二进制文件script.bin

打开内核源码的文件夹,然后打开源码够工具文件夹

Sudo cd ../linux-sunxi-sunxi-3.0

Sudo cd ../sunxi-tools-master/       //这个文件夹就在内核源码里面单词里面有tools

Sudo make

make出现如下错误:

Package libusb-1.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `libusb-1.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libusb-1.0' found
Package libusb-1.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `libusb-1.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libusb-1.0' found

但还是在sunxi-tools-master目录下生成了fex2bin。这个错误还没解决,打算先用生成的fex2bin试试(fex2bin文件,能把 *.fex文件生成 *.bin文件

解决方法:

pkg-config 是一个提供从源代码中编译软件时查询已安装的库时使用的统一接口的计算机软件。可以解决明明在自己机器上编译好好的,在别人电脑上编译就不行问题。当安装一个库时(从RPMdeb或其他二进制包管理系统),会包括一个后缀名为pc的文件,它会同其他.pc文件一起放入一个文件夹(依赖与你的系统设置)。在这个文件里包含有数个条目。这些条目通常包含用于其他使用这个库的程序编译时需要的库设置,以及头文件的位置,版本信息和一个简介。

sudo apt-get install libusb-1.0-0-dev  //安装这个软件

sudo find -name "libusb-1.0.pc" //查找这个软件的安装位置

./usr/lib/i386-linux-gnu/pkgconfig/libusb-1.0.pc //这是我的机器的位置

Sudo export PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu /pkgconfig:$PKG_CONFIG_PATH

Sudo set | grep PKG_CONFIG //显示本地的环境变量

PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig //环境变量设置成功

Sudo pkg-config libusb-1.0 --cflags –libs

Sudo make

利用上面生成的工具fex2bin,sunxi-boards/sys_config/a10/pcduino.fex文件生成对A10芯片进行配置的二进制文件script.bin

sunxi-tools文件夹下找到fex2bin可执行文件

Sudo ./fex2bin ../sunxi-boards/sys_config/a10/pcduino.fex script.bin //其根据自己的目录找对应的文件

sudo mount /dev/sdc1 /mnt                   

Sudo cd /mnt

Sudo mkdir root //mnt目录下创建root目录

打开内核源码目录                

Sudo cp arch/arm/boot/uImage /mnt/root/ //烧写内核到sdc1

打开sunxi-tools文件夹

Sudo cp script.bin /mnt/boot   //找到脚本文件写入dsc1分区

 

配置启动参数文件

A10UBOOT读取启动参数流程如下生成过程boot.cmd——>boot.src——>uEnv.txt

制作boot.cmd

Sudo vim boot.cmd

setenv bootargs console=ttyS0,115200 noinitrd root=/dev/mmcblk0p2 init=/sbin/init rootwait

panic=10 ${extra}
fatload mmc 0 0x43000000 boot/script.bin
fatload mmc 0 0x48000000 boot/uImage
bootm 0x48000000

制作boot.scr

Sudo mkimage -C none -A arm -T script -d boot.cmd boot.scr

制作uEnv.txt

Sudo vim uEnv.txt

bootenv=boot.scr
loaduimage=fatload mmc ${mmcdev} ${loadaddr} ${bootenv}
mmcboot=echo Running boot.scr script from mmc ...; source ${loadaddr}

配置文件写入sdc1分区

Sudo cp boot.scr /mnt/

Sudo cp uEnv.txt /mnt/

卸载sdc1分区至此ubootuimage,启动文件烧写完毕,后面是根文件系统的烧写

Sudo umount /mnt

 

1.2.3TF卡烧写根文件系统  

sudo mount /dev/sdc2 /mnt/  //挂载TF卡的sdc2分区到/mnt

打开制作好的rootfs目录

sudo cp -pR rootfs/*  /mnt/  //把整个目录拷贝到sdc2分区

sudo umount /dev/sdc2   //卸载分区

 

在全部烧写完成之后,插入TFubuntu12.04可以识别为两个盘,一个盘里面是有boot文件夹和boot.scr文件,uEnv.txt文件。其中boot文件夹里面装着script.binuImage文件。另一个盘里面可以看到是文件系统的那些文件。至此系统部署成功了。

拔下TF卡,插入pcduino至此UBOOT,启动配置文件,内核,文件系统都烧写完毕。系统上电,顺利的化,整个最小系统就启动配置成功了,可以进一步的驱动开发了。如果要修改UBOOT,内核,重新编译烧写就可以了。正常的化系统可以进入串口终端了。

/ # ls
bin         home        lost+found  run         tmp
dev         lib         mnt         sbin        usr
etc         linuxrc     proc        sys         var
/ # 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/msq19895070/article/details/17437693

智能推荐

飞冰使用_飞冰如何获取环境变量-程序员宅基地

安装npm和cnpm配置环境变量npm install cnpm -g --registry=https://registry.npm.taobao.orgnpm cache clean --force用当前项目下dos用 cnpm install --by=npm命令行环境的安装npm install --save-dev sass-loadernpm inst..._飞冰如何获取环境变量

行业Quan你为靠Pythn和C++就了-程序员宅基地

转 行业 | 做Quant,你以为靠Python和C++就够了吗?“对 Quant 而言 Python 的需求高吗,除 C++ 外还有哪些流行的编程语言?”1. 高2. 还有:Python, Java, Matlab, R, Q和一些公司内部自有语言(如高盛的自有语言)但是我不希望敷衍了事,说说我心中最重要的五类语言。这不仅仅是对于一个Quant必须的,而是一个丰满的程序员所必备的。在艺术..._pythn和c++

Java高效并发(二)----JAVA线程实现、调度、状态-程序员宅基地

进程与线程的区别进程:CPU资源分配的最小的单位,由进程的各个线程共享线程:cpu执行调度的最小单位,优点充分利用CPU资源操作系统线程的实现主流的操作系统都提供了线程的实现(1)内核线程实现内核线程(KLT)就是由操作系统内核直接支持的线程,内核通过操纵调度器对线程进行调用,程序不直接与内核线程接触而是通过一种高级接口轻量级进程(LWP),它与内核线程一一对应,这就是我们...

Python学习笔记—— tkinter_05 Text(多行输入框)_tkinter的文本框不支持键盘输入-程序员宅基地

一、Text输入框的属性属性 参考:Python学习笔记—— tkinter_03Button、Label_小橙子的博客-程序员宅基地Python学习笔记—— tkinter_04 Entry(单行输入框)_小橙子的博客-程序员宅基地二、Text输入框的方法1.理解行和列多行文本,确定一个位置需要使用坐标。列数从0开始数行数从1开始数2.删除,插入、获取文本框里的内容:随意输入充当测试数据删除,插入、获取 都需要使用坐标或光标处,结尾等确定位..._tkinter的文本框不支持键盘输入

QT在QScrollArea中实现动态调整QGridLayout高度_qgridlayout 最小高度-程序员宅基地

1、这里实现一个4列多行的Grid布局代码片段。_qgridlayout 最小高度

随便推点

codeblocks如何支持_tmain?可移植代码的编码推荐-程序员宅基地

codeblocks默认源代码文件编码根据OS而定,编译时编码UTF-8。 在你不更改任何codeblocks配置时: 在WINDOWS中:源代码——WINDOWS-936(即GBK),编译后文件默认UTF-8 而输出windows会按GBK来解释 ,所以从GBK->UTF-8->GBK就是乱码; 在LINUX中:源代码——..._code blocks _tmain

mantis修改用户默认密码_mantis 忘记管理员密码-程序员宅基地

在Administrator(管理员)创建其他新用户时,忘记其他新用户的密码或者其他新用户密码是默认状态时,可以通过进行如下操作:1 点击如下在mysql中的Admin;j结果如下,再点击左边一栏的bugtracker;_mantis 忘记管理员密码

Java 有没有开源的接口分析,类似于统计接口调用次数、接口响应时间、接口调用成功次数、失败次数这些?_java接口调用统计开源组件-程序员宅基地

1 viakiba 325 天前 Sleuth + Zipkin 2 ayonel 325 天前 这些是监控系统干的活,国内比较好的是 CAT,但是系统比较庞大。或者 metrics,比较轻量。https://github.com/dropwizard/metrics 3 msaionyc 325 天前 java 平台 spri..._java接口调用统计开源组件

内网、外网、宽带、带宽、流量、网速之间的区别与联系_服务器只要内网需要带宽带吗-程序员宅基地

目录一.带宽与宽带的区别是什么?二.带宽、网速和流量之间的关系三.上行带宽和下行带宽是什么意思?各有什么作用?四.服务器的上行和下行带宽理解五.内网ip和外网ip区别一.带宽与宽带的区别是什么?带宽是量词,指的是网速的大小,比如1Mbps的意思是一兆比特每秒,这个数值就是指带宽。宽带是名词,说明网络的传输速率很高 。宽带的标准各不相同,最初认为128kbps以上带宽的就是宽带,而以下的就是窄带。但现在国内运营商一般提供至少512kbps带宽的宽带服务。也就是说,带宽是_服务器只要内网需要带宽带吗

DIR命令输出文件列表,只显示文件名-程序员宅基地

dir /b转载于:https://www.cnblogs.com/sea-stream/p/10161818.html

使用vagrant box 搭建属于自己的linux开发环境_vagrant linux box-程序员宅基地

官网:https://www.vagrantup.com准备工作版本选择:centOS 5.6 64bitMySQL 5.6redis 3.2nginx 1.10.2 先决条件: Host 机上装好 vagrant, virtualBox 下载好 centOS 虚拟镜像安装virtualBox自行百度, 安装很简单, 确保网络配置中的使用网线连接勾上就好了 不然..._vagrant linux box

推荐文章

热门文章

相关标签