TINY4412 驱动开发学习笔记整理--环境搭建篇
来源:互联网 发布:seo经验分享 编辑:程序博客网 时间:2024/05/01 22:35
说在前面的话:
此篇是由课堂笔记整理而来,以上课时使用的开发板和工具。
采用pc和开发板交互的方式进行.
PC到开发班的数据传输使用USB,使用dnw 工具进行;
Dnw的安装:
tar -xvf dnw-linux.tar.gz
cd dnw-linux
make
Make install
开发板到PC的数据传输使用串口,使用minicom工具进行:
Minicom 的配置方法:
执行minicom -s 命令
在弹出的configuration 对话框中选择 Serial port setup
进入后输入A 修改Serial Device :/dev/ttyS0 (如若使用USB转串口的话 修改为 /dev/ttyUSB0)
回车退出,选择Save detup as dfl 成功后选择Exit退出
若要完全退出minicom 使用组合键ctrl+a _q;
ARM开发板的启动过程
1)启动过程
bootloader ----> Linux kernel ---->rootfs ------> file system
2)bootloader
(1)bootloader的作用:硬件初始化 引导内核
(2)bootloader的种类
u-boot:遵循GPL条款的开放源码项目
vivi:三星公司编写
(3)u-boot常用命令
(4)bootloader的引导方式:sd卡或者emmc
3)kernel
(1)Linux 内核是一个操作系统核心,提供操作系统的最基本的功能
(2)包括系统的进程,内存,设备驱动程序,文件和网络程序
4)rootfs
(1)文件系统是对一个存储设备上的数据和元数据进行组织的机制
.用于用户和操作系统的交互
(2)根文件系统属于文件系统的一种
.具有普通文件系统存储数据文件的功能
.内核启动时挂载的第一个文件系统,作为其他文件系统的根目录
.内核代码的镜像文件保存在根文件系统
5)烧写u-boot/kernel/rootfs/file system
(1)使用友善之臂提供的Superboot4412.bin
.Superboot4412.bin具有一健烧写bootloader/Kernel/rootfs
(2)sd分区
(a)、将sd卡插入pc
(b)、卸载sd卡
umount /media/*
(c)、查看sd卡信息
fdisk -l
可以查找到sd卡所对应的设备文件
(d)、删除sd卡分区并重新分区
fdisk /dev/sdb
删除分区
Command (m for help): d
Selected partition 1
Command (m for help): p
Disk /dev/sdb: 3904 MB, 3904897024 bytes
168 heads, 7 sectors/track, 6485 cylinders, total 7626752 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
新建分区,在分区前面留100M给Superboot4412.bin
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-7626751, default 2048): 204800
Last sector, +sectors or +size{K,M,G} (204800-7626751, default 7626751): (直接回车,选择默认)
Command (m for help): p
Disk /dev/sdb: 3904 MB, 3904897024 bytes
168 heads, 7 sectors/track, 6485 cylinders, total 7626752 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdb1 204800 7626751 3710976 83 Linux
修改分区的system id
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): b
Changed system type of partition 1 to b (W95 FAT32)
Command (m for help): p
Disk /dev/sdb: 3904 MB, 3904897024 bytes
168 heads, 7 sectors/track, 6485 cylinders, total 7626752 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdb1 204800 7626751 3710976 b W95 FAT32
保存分区
Command (m for help): w
(e)、格式化分区
mkfs.vfat /dev/sdb1
(3)烧写Superboot.bin烧写到SD卡中
cd <Exynos4412_resource>/images
dd iflag=dsync oflag=dsync if=Superboot4412.bin of=/dev/sdb seek=1
(4)将images文件夹拷贝到sd卡中
(5)将sd插入开发板,开始烧写系统,默认烧写Android系统到EMMC,包括bootloader/kernel/rootfs/system
.烧写完成后将boot sw切换到emmc启动
(6)一健烧写Linux系统
.将sd重新插入pc
.修改sd卡images文件夹中的FriendlyARM.ini文件
OS = Android 改为 OS = Linux
6)安装arm-linux-gcc
(1)cd Exynos4412_source/tools
(2)tar -xvf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz -C /
notes:
.安装路径:/opt/FriendlyARM
(3)vim /etc/profile or /etc/bashrc
PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin
source /etc/profile
7)安装dnw
notes:
.dnw:usb下载工具
(1)cd Exynos4412_source/tools
(2)cd dnw-linux
(3)make && make install
notes:
.udevadm trigger udev规则生效
8)编译u-boot源码
(1)tar -xvf uboot_tiny4412-20130729.tgz
(2)cd uboot_tiny4412
(3)vim include/configs/tiny4412.h
311:
#define CONFIG_ENABLE_MMU
------> #undef CONFIG_ENABLE_MMU
vim board/samsung/tiny4412/config.mk
CONFIG_SYS_TEXT_BASE = 0xc3e00000
------>
CONFIG_SYS_TEXT_BASE = 0x43e00000
notes:
.关闭mmu ,直接使用物理地址
(4)make tiny4412_config
(5)make
notes:
.会产生u-boot.bin
9)烧写u-boot.bin到sd卡中
(1)cd sd_fuse
(2)make
notes:
.会产生mkbl2文件
(3)cd tiny4412
(4)将sd卡插入pc
(5)查看sd卡对应设备文件名
Disk /dev/sdb: 1990 MB, 1990197248 bytes
255 heads, 63 sectors/track, 241 cylinders, total 3887104 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdb1 309248 3887103 1788928 b W95 FAT32
(6)./sd_fusing.sh /dev/sdb
(7)将sd卡插入开发板
(8)启动开关切换到sd卡启动
10)编译kernel源码
(1) cd Exynos4412_source/Linux
(2) tar -xvf linux-3.5-20140109.tgz
(3) cd linux-3.5
(4) vim Makefile
+197: ARCH ?=arm
CROSS_COMPILE ?= arm-linux-
(5)cp tiny4412_linux__defconfig .config
(6)make
.notes:
.在arch/arm/boot/目录下会生成zImage
11)下载内核并运行
使用usb线与pc连接
u-boot:
TINY4412 # dnw 40008000
TINY4412 # bootm 40008000
pc:
dnw zImage
12)制作根文件系统
(1)cd Exynos4412_source/Linux
(2)tar -xvf busybox-1.17.2-20101120.tgz
(3)cd busybox-1.17.2
(4)vim Makefile
+163:ARCH ?= arm
CROSS_COMPILE ?=
(5)make defconfig
(6)make menuconfig
Linux Module Utilities ---> [ ] Simplified modutils (取消选中) ---> [*] insmod [*] rmmod
[*] lsmod
[*] Pretty output
[*] modprobe
[*] Blacklist support
[*] depmod
(7)make
(8)make install
(9)cp _install/* /nfsroot -ra
(10)mkdir dev lib sys proc etc tmp
(11)cp /opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib/* . -ra
(12)cd etc
(13)touch fstab inittab profile
####################################################
fstab
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
inittab
::sysinit:/etc/init.d/rcS //设置内核的hotplug handler 为 mdev, 即当设备热插拔时,由 mdev 接收来自内核的消息并作出相应的回应
#ttySAC0::askfirst:/.bashrc
ttySAC0::askfirst:-/bin/sh //在串口启动一个登陆会话
::ctrlaltdel:/bin/umount -a -r //作为init重启执行程序
::shutdown:/bin/umount -a –r //告诉init在关机时运行umount命令卸载所有的文件系统,如果卸载失败,试图以只读方式重新挂载
profile
# /etc/profile: system-wide .profile file for the Bourne shells
#!/bin/sh
#Ash profile
#vim:syntax=sh
#No core file by defaults
#ulimit -S -c 0>/dev/null 2>&1
USER="id -un"
LOGNAME=$USER
PS1='[root@tiny4412]#'
PATH=$PATH
HOSTNAME='/bin/hostname'
export USER LOGNAME PS1 PATH
####################################################
(14)mkdir init.d
(15)cd init.d
(16)touch rcS
####################################################
rcS
#! /bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
/bin/mount -a //加载文件/etc/fstab文件中的选项
echo /sbin/mdev>/proc/sys/kernel/hotplug
mdev -s //在 /dev/ 目录下建立必要的设备节点
/bin/hostname -F /etc/sysconfig/HOSTNAME //设置主机的名字
####################################################
(17)chmod u+x rcS
(18)创建设备文件
console null tty2 tty3 tty4 ttySAC0 ttySAC1 ttySAC2 ttySAC3
13)挂载文件系统
u-boot:
TINY4412 # set bootargs=root=/dev/nfs nfsroot=192.168.1.10:/nfsroot init=/linuxrc ip=192.168.1.20 console=ttySAC0,115200
TINY4412 # saveenv
TINY4412 # dnw 40008000
TINY4412 # bootm 40008000
pc:
dnw zImage
u-boot:
set bootargs "root=/dev/nfs nfsroot=192.168.1.10:/nfsroot init=/linuxrc ip=192.168.1.20 console=ttySAC0,115200"
saveenv
dnw 41000000
dnw 40008000
bootm 40008000 41000000
pc
tar -xvf rootfs_qtopia_qt4-20131222.tar.gz -C /nfsroot
dnw ramdisk-u.img
dnw zImage
ramdisk地址一般是大于16M的位置 0x1000000,由于Exyons 4412 内存起始地址0x4000000 所以ramdisk地址下载到0x41000000
编译出来的内核也没有问题
nfsroot:
后记:开发环境的搭建是我们学习嵌入式开发的第一步,加油!
- TINY4412 驱动开发学习笔记整理--环境搭建篇
- TINY4412 驱动开发学习笔记整理---内存管理篇
- TINY4412 驱动开发学习笔记整理--ARM体系结构篇
- 【Tiny4412】 Tiny4412开发环境搭建
- Tiny4412 开发环境搭建(一)
- Tiny4412 开发环境搭建(二)
- Tiny4412 开发环境搭建(三)
- tiny4412-arm嵌入式开发裸板驱动 (一):开发环境及工具搭建和介绍
- Tiny4412 开发板 编译环境搭建
- 基于tiny4412搭建Android开发环境
- Tiny4412 ARM开发环境搭建--交叉编译环境搭建
- 【Tiny4412--1】环境搭建
- 【内核笔记1】搭建驱动开发环境
- C++测试驱动开发环境搭建--笔记
- 64位ubuntu kylin 16.04下tiny4412开发环境搭建
- 驱动开发环境搭建
- 驱动开发环境搭建
- tiny4412 uboot 裸机环境搭建
- Minimum Path Sum
- 获取输入input()
- HtmlAgilityPack 之神兵利器
- HDU 1114 完全背包
- linux基本指令
- TINY4412 驱动开发学习笔记整理--环境搭建篇
- 字符串-02. 删除字符串中的子串(20)
- boj408字符串——hash的应用
- 转载的面试题
- poj 2886(线段树单点更新)
- [UvaLive 6757] Cup of Cowards [搜索]
- CSDN好久不上交流请加加入QQ群114744191
- renderer.material.mainTexture,
- 蜘蛛侠从天而降,摔死在我的mac键盘上