驱动烧写基础

一、驱动的基本常识

1.1 常用命令

  1. 查看节点
    cat /proc/devices
    2.加载.ko到内核
    insmod *.ko
    3.查看内核打印
    dmesg
    4.卸载内核模块
    sudo rmmod *
    5.手动创建设备节点
    通过”mknod /dev/memdev0 c XXX 0”命令创建”/dev/memdev0”设备节点 (xxx是数字)。

1.1 BootLoaer作用:
(1)引导程序;(2)初始化外部设备
(3)装载LINUX内核(4)跳转到内核执行(5)UBOOT
1.2 LINUX内核和文件系统:
Kernel即LINUX内核;
Linux系统启动到最后一定要挂在一个文件系统;
Android、QT、Ubuntu底层都是Linux内核;
Android、QT、Ubuntu的差异在于文件系统
1.3硬件、内核、应用层次

1.3.1计算机串口配置
查看配置:
(1)进入控制面板/系统和安全/系统/设备管理器
(2)选择对应的串口,注意用户的串口不一定是con1(这个不一定,本机连接con3)
(3)属性配置115200/数据位8/奇偶校验无/停止位1流控制无
设置配置:
(1)com1(这个看计算机)/115200/8bits/None/1bits/None/0/0
(2)其它默认
1.3.2 背景知识u-boot,Linux内核,Android上层应用的作用
(1)U-boot :初始化内存控制区,访问存储器,把内核从存储器中读出放在内存中,使CPU运行到Linux内核中,对应u-boot-iTOP-4412.bin文件。
1.3.3 Linux内核的作用
底层驱动,Linux需要做的工作,对应zImage文件;
1.3.4 Android应用
ramdisk-uboot:启动android各种服务的脚本,对应ramdisk-uboot.img文件
system:Android文件系统,比较大,下载耗时长,对应system.img文件

1.4进入UBOOT和ANDROID
(1)进入uboot状态
倒计时的时候回车键进入uboot
(2)进入Android状态
acc_open
acc_release
cpu1:shutdown动态控制内核与调频
二、4412开发板烧写
2.1、Android烧写
2.1.1、 iTOP-4412支持三种操作系统
Android
Linux + QT
Ubuntu操作系统
注意:Android和Linux+QT系统的烧写完全一样

2.1.2、镜像文件的位置和组成,以Android为例
u-boot-iTOP-4412.bin
zImage
ramdisk-uboot.img
system.img

2.1.3、背景知识EMMC,SD (TF) 卡

a、基本硬件介绍
CPU
拨码开关
内存
EMMC
SD

b、启动模式
iTOP-4412开发板有两种启动模式,分别是EMMC启动模式和SD卡启动模式
通过控制拨码开关指引CPU去读EMMC还是SD卡的u-boot文件
c、启动模式控制,薄码开关只有在很少的情况下需要拨动
拨码开关1-3号键是011,EMMC启动模式
拨码开关1-3号键是100,SD卡启动模式
2.1.4、两种烧写模式
A、fastboot烧写方式
这种方式比SD卡烧写方式要快很多,建议调试的时候使用这种方法
B、SD(TF)卡烧写方式
在下载错误的u-boot后必须使用到SD卡,也是必须掌握的
2.1.5、fastboot烧写
第一步:拷贝Android相关的镜像到fastboot文件夹中

第二步:打开超级终端,默认波特率115200

第三步:启动开发板,串口进入倒计时,输入任意字符,进入u-boot模式

第四步:格式化eMMC并创建分区,
注意:1、此步骤可以跳过!不必每次都格式化分区;
2、格式化命令不会删除uboot文件和Linux内核文件;
(1)fdisk -c 0 ;
按照默认方式给EMMC分区;
Linux内核镜像文件为5M;
Android镜像文件为300M;
Data和Cache文件为1G;
临时文件为300M;
剩下的为用户区,例如使用手机的时候下载的电影小说都是放在这个区域;
如果想更改Linux内核镜像文件区域的大小,只能更改u-boot文件,我们提供 源码;
例如fdisk -c 0 500 1026 600 可以将EMMC分为Android镜像500M、Data和 Cache文件夹 为1026M、临时文件为600M;
(2)fatformat mmc 0:1
格式化Fat文件系统,也就是默认最大的用户存储空间
(3)ext3format mmc 0:2
格式化Android镜像文件
(4)ext3format mmc 0:3
格式化Data和Cache分区
(5)ext3format mmc 0:4
格式化临时文件保存区

第五步:连接开发板和PC的USB_fastboot_tool工具,串口中输入命令
fastboot
第一次执行这一步的时候会需要手机助手帮您下载驱动软件,我已经测试过豌豆 荚和360手机助手,都是没有问题的

第六步:打开\USB_fastboot_tool\ platform-tools文件夹中的cmd.exe,注意,如果下面4个文件,可以分开安装
在cmd.exe窗口中输入以下命令,提示:只有编译后代码对应文件改变了才需要烧写,其它未更改的不要要烧写,改内核重新烧写内核,其它不用烧写
fastboot.exe flash bootloader u-boot-iTOP-4412.bin
注意新手不要烧写执行这一步:fastboot.exe flash bootloader u-boot-iTOP-4412.bin
fastboot.exe flash kernel zImage
fastboot.exe flash ramdisk ramdisk-uboot.img
fastboot.exe flash system system.img
fastboot -w(格式化FAT、Data、cache分区)
上面的命令可以一条条执行

第七步: cmd.exe中输入
fastboot reboot

2.1.6 、下载后无法启动排查步骤
电源是否开启,LED灯是否点亮;
是否处于EMMC启动模式;
任何一种烧写方式,在最后要启动系统的时候,都要处于EMMC启动方式;

使用超级终端检查烧写镜像是否正确(串口是否连接好);
能够进入读秒阶段,说明u-boot已经烧写正确;
能够成功读取内核,说明Linux内核烧写正确;
能成功读取Android文件,说明Android烧写正确;

使用直流电源,对比参考文档里面的电流

2、TF卡烧写Linux-QT
2.1所需平台
硬件平台
iTOP4412开发板底板+核心板
串口线
大于2G的TF卡或者SD卡(自备)

软件平台
Ubuntu系统,Windows系统
超级终端或者其它串口软件(超级终端的使用参考xxx)

2.2制作可以下载的TF卡
第一步:给TF卡分区
把TF卡插入开发板上,连接开发板串口到电脑,EMMC启动方式,开发板启动
超级终端返回数据中出现倒计时,输入任意命令,进入uboot
输入下列命令(同EMMC,只是把0换成1)
1) fdisk -c 1 (2GTF卡 fdisk -c 1 300 300 300)
2) fatformat mmc 1:1
3) ext3format mmc 1:2
4) ext3format mmc 1:3
5) ext3format mmc 1:4
第二步:烧写u-boot
使用读卡器连接TF卡或者SD卡到Ubuntu系统,查看磁盘命令
进入U-boot所在目录iTOP4412_uboot
通过使用df -l命令查看盘符,确认盘符编号下面指令最后一位由盘符决定
执行命令烧写u-boot到TF卡:./mkuboot /dev/sdb(有可能sdc或者其它)

注意 :
2G的TF卡,上述第一步,进入uboot命令行后输入的第一条命令改为:fdisk -c 1 300 300 300, 其它不变

如何确认TF卡制作成功
把TF卡插回开发板,拨码开关改成从TF卡启动(100),开发板启动串口能够输出数据, 进入读秒
TF插入PC后少了部分空间
一定记得将拨码开关恢复到(011)

2.3使用TF卡烧写
(1)烧写系统,可以在Windows或者Ubuntu

第一步:TF卡接入PC中,建立sdupdate文件夹,文件夹名字是固定的

第二步:拷贝镜像到TF卡中

第三步:TF卡插入开发板,PC打开超级终端。没有必要动拨码开关,开发板启动,超 级终端开始倒计时,按任意键进入u-boot

第四步:超级终端中输入命令
sdfuse flashall(也可以分开烧写,也可以单独烧写)
下面是分开烧写的命令
sdfuse flash bootloader u-boot-iTOP-4412.bin
注意新手不要烧写执行这一步:sdfuse flash bootloader u-boot-iTOP-4412.bin
sdfuse flash kernel zImage
sdfuse flash ramdisk ramdisk-uboot.img是在android5.0源码还是编写APK的程序源码中?是assert文件夹不是
sdfuse flash system system.img

等待更新完成,输入reset
(2)如果烧写错误的u-boot到EMMC中
判断: EMMC启动模式无法进入u-boot,也就是无读秒的状态
处理: (1)有可以烧写的SD卡;
处于SD卡启动模式,进入u-boot;
使用SD卡烧写,软硬件平台参考前面SD卡的烧写;
sdfuse flashall;
新手参考前面分开烧写的命令;
sdfuse flash bootloader u-boot-iTOP-4412.bin;
注意新手不要烧写执行这一步:sdfuse flash bootloader u-boot-iTOP-4412.bin;
烧写后关机,要处于EMMC启动模式,在开机就可以启动 ;

(2)没有可以烧写的SD卡是在android5.0源码还是编写APK的程序源码中?是assert文件夹不是
第一步:制作可以烧写的SD卡(参考SD卡的制作);
第二步:跳过分区,直接将u-boot烧写到SD卡里面;
使用读卡器连接TF卡或者SD卡到开Ubuntu系统,查看磁盘命令
解压“光盘/Android源码/iTop4412_uboot_xxx_xxx.tar.gz”,得到文件夹“iTOP4412_uboot”,拷贝对应uboot到文件夹“iTOP4412_uboot”中。;
进入U-boot所在目录iTOP4412_uboot;是在android5.0源码还是编写APK的程序源码中?是assert文件夹不是
通过使用df -l命令查看盘符,确认盘符编号下面指令最后一位由盘符决定;
执行命令烧写u-boot到TF卡:./mkuboot /dev/sdb(有可能sdc或者其它);
第三步:执行分区,SD卡启动,串口中输入命令
fdisk -c 1;
第四步:再次执行第二步;
第五步:你有一个可以烧写的SD卡;

2.3 Ubuntu操作系统的烧写

(1)硬件平台
iTOP4412开发板底板+核心板;是在android5.0源码还是编写APK的程序源码中?是assert文件夹不是
串口线;
读卡器,一张SD卡最好是2G(自备),另外一张卡(大于等于2G 都可以,也可以使用U盘);

(2)软件平台
Ubuntu操作系统,Windows系统;
超级终端;
镜像文件和压缩包,在光盘的Ubuntu文件夹中,和其它2种操作 系统有区别;

2.3.1 Ubuntu系统烧写的特点

(1)烧写的时间很长,先要制作可以启动的TF卡最少半小时, 然后烧写Ubuntu文件到核心板还需要半小时;
启动方式全部是EMMC模式,不需要动拨码开关

(2)Ubuntu烧写的步骤和下面这个笑话很相似
把大象放冰箱分几步,把冰箱门打开,把大象放进去,把冰箱门 关闭;
2.3.2制作可以烧写运行的TF卡

Ubuntu烧写步骤
第一步:通过PC机的Ubuntu系统把Ubuntu系统文件解压缩到TF卡里面(第一次把大象放冰箱)。
第二步:通过TF卡启动Ubuntu系统把系统文件解压缩到EMMC里面(第二次把大象放冰箱)。

第一次把大象放冰箱,主要操作就是将系统文件解压缩到TF卡(2G)里面

注意:这里制作TF卡和前面的制作是有区别的,而且这个解压缩的卡要求是2G的,我们通过测试市场上的各种卡,只有2G的卡制作起来是没有问题的,其它大小的TF卡有可能无法制作(参考PPT最后面勘误)

详细步骤
(1)将2G的TF卡插入开发板,启动,进入uboot,执行下面命令,格式化TF卡
fdisk -c 1 1700 50 50
fatformat mmc 1:1
ext3format mmc 1:2
ext3format mmc 1:3
ext3format mmc 1:4

(2)TF卡连接到PC机的Ubuntu系统

在Ubuntu系统的终端上输入df -l,可以查看到TF卡盘符的名称,这个磁盘分区名是不确定的。需要明白的是我们使用的是1.7G的TF卡分区。

将ubuntu_12.04.tar.gz解压缩到TF卡的分区,解压命令:
tar -xvf ubuntu_12.04.tar.gz -C/media/磁盘分区名1.7G

解压缩需要三十分钟左右
完成后建立sdupdate文件夹,拷贝Ubuntu文件夹里面的三个镜像文件到文件夹,包括uboot文件和2个内核文件。
将Ubuntu的压缩文件拷贝到U盘(或者另外一张TF卡)里面。

2.3.3 解压Ubuntu系统文件到EMMC中

(1)执行前面的操作就是为了把第二个冰箱的门打开,第二次把大象放入第二个冰箱里,主要操作是将系统文件解压缩到EMMC里面

打开冰箱门,通过TF卡启动开发板,这里也是EMMC启动模式, 烧写Ubuntu不需要动薄码开关
将2G的TF卡插入开发板,开机,按任意键,启动进入uboot模式
给EMMC分区,命令为:
fdisk -c 0 1700 300 300
fatformat mmc 0:1
ext3format mmc 0:2
ext3format mmc 0:3
ext3format mmc 0:4
执行烧写命令:sdfuse flash bootloader u-boot-iTOP-4412.bin和sdfuse flash kernel zImage_sd,这一步是将可以执行SD卡里面的Ubuntu文件系统的Linux内核烧写到EMMC。
执行命令reset重启,可以看到开机进入了Ubuntu系统。
(2)把大象放进去

解压缩U盘里面的压缩文件到EMMC里面。
拷贝了压缩文件的U盘通过USB接口和开发板连接。
使用查看盘符命令df -l,查看EMMC,SD卡,U盘盘符名
进入带有压缩文件的盘符,使用解压命令,将压缩文件解压到EMMC里面,命令为:
cd /media/(带有Ubuntu压缩文件的磁盘名,也有可能是别的名字)
tar -xvf ubuntu_12.04.tar.gz -C/media/EMMC的磁盘名1.7G大小

解压缩过程持续三十分钟以上

2.3.4 Ubuntu烧写
关冰箱门

将内核文件zImage烧写进EMMC

进入uboot,执行命令:sdfuse flash kernel zImage,大家注意这次烧写的Linux内核和前面的是不一样的

输入命令reset,重启,Ubuntu系统就在完全在开发板上运行起来了