logo资料库

嵌入式Linux学习笔记(基于S5PV210、TQ210).pdf

第1页 / 共210页
第2页 / 共210页
第3页 / 共210页
第4页 / 共210页
第5页 / 共210页
第6页 / 共210页
第7页 / 共210页
第8页 / 共210页
资料共210页,剩余部分请下载后查看
1 前言
2 开发环境搭建
3 制作交叉编译工具链
3.1 下载工具crosstool-ng http://www.crosstool-ng.org/
3.2 安装crosstool-ng的软件依赖包
3.3 编译安装crosstool-ng
3.4 现在开始制作交叉编译器
4 裸机编程
4.1 汇编学习
4.1.1 基础知识
4.1.2 ARM模拟器
4.2 S5PV210启动流程
4.3 点亮一个LED
4.4 串口
4.5 实现printf函数
4.6 时钟配置
4.7 重定位(BL1加载BL2到SRAM)
4.8 DDR
4.9 NAND FLASH读写
4.10 NAND读写之8位硬件ECC
4.11 NAND读写之8位硬件ECC(续)
4.12 LCD操作
5 移植u-boot(基于2014.4版本)
5.1 概述
5.2 u-boot配置过程分析
5.3 u-boot编译过程分析
5.4 SPL
5.5 添加自己的单板
5.6 移植u-boot-spl.bin
5.7 u-boot.bin内存布局分析
5.8 u-boot重定位
5.9 u-boot启动流程总结
5.10 支持命令补全和历史命令
5.11 移植网卡DM9000
5.12 移植NAND FLASH
5.13 给NAND添加分区
5.14 命令行解释器
5.15 实现NAND 8位硬件ECC
5.16 实现NAND启动u-boot
5.17 合并smdkv210-spl.bin和u-boot.bin为一个文件
5.18 添加启动菜单
5.19 实现LCD显示
5.20 实现开机提示音
6 移植内核(基于linux-3.10.46)
6.1 初步配置
6.2 网卡(DM9000)
6.3 NAND FLASH
6.4 NAND 8位硬件ECC
6.5 LCD
6.6 从根源解决10分钟后LCD黑屏
6.7 PWM背光调节
6.8 PWM蜂鸣器
6.9 LED(触发器)
6.10 按键
6.11 I2C
6.11.1 方式一(i2c-dev.c)
6.11.2 方式二(at24.c)
6.12 RTC
6.13 1-wire (DS18B20)
6.14 看门狗
6.15 SD/MMC
7 驱动
8 综合应用
1 前言 本文更多的是教会大家如何学习。 学习嵌入式,首先需要学好 C 语言,推荐大家看郝斌的 C 语言视频教程,不要问我视频在哪。这里 引用一段网友的话:我在网上搜了一大堆 C 语言教学视频,可是都是讲得乱七八糟的,有的就是照本宣 科,从不敲代码,把做好的 PPT 读完,那一专讲就没了。然而,郝老师讲的 C 语言太犀利了,简单明了 不说,老师讲的每一点东西都还是用键盘敲出来的,若遇到了难点老师都会仔细的讲出分析思路,让你 不接受,也得接受。想想大学里,老师真悲剧,讲的吐白沫,到头来没几个人真正的明白 C 语言这门课。 另外,还需要熟悉 Linux 发行版的使用,推荐使用 ubuntu,因为安装软件非常方便,网上资料也多。 熟悉 Linux 系统下的基本命令操作(不用记,用多了就熟悉了),熟悉 Makefile 基本操作,推荐大家看《鸟 哥的 linux 私房菜_基础学习篇(第三版)》和《gnu make 中文手册》。 本文以 S5PV210 为学习平台,使用 TQ210 开发板。 个人 QQ:809205580 技术交流群:153530783 个人博客:http://blog.csdn.net/zjhsucceed_329 本文所有源码、工具下载地址:http://pan.baidu.com/s/1fEfG6 淘宝店铺:http://yytec2008.taobao.com 2 开发环境搭建 采用 VMware-workstation 虚拟机+linux 系统的方式 首先下载 VMware-workstation(http://pan.baidu.com/s/1pJyk0gr), 按默认安装即可。 然后是安装 ubuntu 系统,大家可以从 http://pan.baidu.com/s/1eQziJh4 下载 ubuntu 镜像文件, 参照我的博客《ubuntu-10.10 嵌入式开发环境搭建》搭建 ubuntu 环境。 或者从 http://pan.baidu.com/s/1dDIhDg1 下载我制作好的 ubuntu 镜像文件 Ubuntu-10.10-x86-bk.rar,下载后解压到合适的位置,比如我自己的环境是: 个人 QQ:809205580 技术交流群:153530783 个人博客:http://blog.csdn.net/zjhsucceed_329
然后打开 VMware-workstation 先设置一下,选择 Edit->Preferences 选择 View->Autofit Window,这样在 VMware-workstation 窗口大小改变时,ubuntu 的大小会自动变换到 合适的大小,前提是要安装 VMware tools。 选择 File->Open,定位找到刚才解压的文件夹,选中 Ubuntu.vmx,然后打开。 设置虚拟机位置。 个人 QQ:809205580 技术交流群:153530783 个人博客:http://blog.csdn.net/zjhsucceed_329
然后单击 即可启动 ubuntu 系统,出现对话框 选择 I moved it 个人 QQ:809205580 技术交流群:153530783 个人博客:http://blog.csdn.net/zjhsucceed_329
用户名为 root,密码为 zjh329 如果没有安装 VMware tools,现在开始安装,选择 VM-> Install VMware Tools,然后在 ubuntu 中执行如 下命令: root@zjh:~# cp /media/VMware\ Tools/VMwareTools-* . 拷贝到当前目录 root@zjh:~# tar -zxvf VMwareTools-* root@zjh:~# cd vmware-tools-distrib/ root@zjh:~/vmware-tools-distrib# ./vmware-install.pl 接下来一路 yes 和回车直到安装完毕。 root@zjh:~# rm -r VMwareTools-* vmware-tools-distrib/ 重启系统,现在随意改变 VMware-workstation 窗口的大小,ubuntu 的窗口大小会自动适应。 个人 QQ:809205580 技术交流群:153530783 个人博客:http://blog.csdn.net/zjhsucceed_329
建立 Windows 到 ubuntu 的文件夹共享: VM->Settings, 选择 options, 选择 Shared Folders, 单击右下角的 Add 添加要共享的文件夹,选中上面的 Always enabled,确定后重启 ubuntu 系统。然后就 可以在 ubuntu 下访问 Windows 下的文件夹了。例如我共享的 E 盘: root@zjh:~# ls /mnt/hgfs/E/ 3 制作交叉编译工具链 3.1 下载工具 crosstool-ng http://www.crosstool-ng.org/ 3.2 安装 crosstool-ng 的软件依赖包 apt-get install bison flex texinfo automake libtool cvs libncurses5-dev aria2 g++ subversion gawk cvsd 3.3 编译安装 crosstool-ng 由于 crosstool-ng 默认只能使用普通用户制作交叉编译器,若想使用 root 用户操作,可以修改 crosstool-ng 源码 scripts/crosstool-NG.sh.in 这个文件,其中有一行“# Check running as root”,在它上面添 加 CT_ALLOW_BUILD_AS_ROOT_SURE=true,这样就可以使用 root 操作了。 下面开始编译安装: root@zjh:/home/work/crosstool-ng-1.19.0# ./configure root@zjh:/home/work/crosstool-ng-1.19.0# make && make install 3.4 现在开始制作交叉编译器 root@zjh:/home/work# mkdir crosstool 首先创建一个工作目录: 个人 QQ:809205580 技术交流群:153530783 个人博客:http://blog.csdn.net/zjhsucceed_329
root@zjh:/home/work# cd crosstool root@zjh:/home/work/crosstool# ct-ng list-samples 查看有哪些默认配置 其中以一个默认配置 arm-cortex_a8-linux-gnueabi,我们就以这个为模板进行配置 root@zjh:/home/work/crosstool# ct-ng arm-cortex_a8-linux-gnueabi 应用这个配置 下面开始自定义: root@zjh:/home/work/crosstool# ct-ng menuconfig Paths and misc options ---> (/home/work/crosstool/src) Local tarballs directory 这里指定你之前下载好的 tar 包所在目录,这样在制作时就不会重新下载了。 (/opt/${CT_TARGET}-4.7.3) Prefix directory 这里指定交叉编译器的安装路径:/opt/arm-cortex_a8-linux-gnueabi-4.7.3 (2) Number of parallel jobs 指定同时执行 2 个工作,加快编译速度 Target options ---> Floating point: (softfp (FPU)) ---> 指定使用软浮点 Toolchain options ---> (cortex_a8) Tuple's vendor string 添加自定义信息,比如: cortex_a8,制作后的交叉编译器名如:arm-cortex_a8-linux-gnueabi- zjh,制作后的交叉编译器名如:arm-zjh-linux-gnueabi- 不设置,制作后的交叉编译器名如:arm-unknown-linux-gnueabi- (arm-linux) Tuple's alias 设置别名,这样会给每个工具创建一个软链接,比如: arm-linux-gcc 链接到到 arm-cortex_a8-linux-gnueabi-gcc Operating System ---> Linux kernel version (3.10.2) ---> 选择内核版本,这里最好选大些,Linux 内核都是向后兼容的。 C compiler ---> gcc version (4.7.3) ---> [*] Compile libmudflap Libmudflap 用于检查内存泄露,包括堆和栈,具体怎么用上网查资料。 C-library ---> 个人 QQ:809205580 技术交流群:153530783 个人博客:http://blog.csdn.net/zjhsucceed_329
glibc version (2.13) ---> [*] Force unwind support (READ HELP!) Companion libraries ---> PPL version (0.11.2) ---> CLooG version (0.15.11) ---> 注意:在制作过程中,若出现版本不匹配的错误,重新配置正确的软件版本,再接着制作。 Save an Alternate Configuration File 保存为配置文件.config,然后退出。 在上面的配置中配置了源码包的存放目录为 /home/work/crosstool/src 因此需要在 /home/work/crosstool 目录下创建目录 src root@zjh:/home/work/crosstool# mkdir src 根据上面配置的软件版本或者查看.config 文件,查看需要的软件版本,然后使用自己的高速下载工 具(比如迅雷)下载所有需要的软件,然后拷贝到 /home/work/crosstool/src 目录下: root@zjh:/home/work/crosstool# ls src/ binutils-2.20.1a.tar.bz2 expat-2.1.0.tar.gz glibc-ports-2.13.tar.bz2 ppl-0.11.2.tar.lzma cloog-ppl-0.15.11.tar.gz gcc-4.7.3.tar.bz2 ltrace_0.5.3.orig.tar.gz gmp-4.3.2.tar.bz2 mpc-1.0.1.tar.gz strace-4.5.19.tar.bz2 dmalloc-5.5.2.tgz gdb-6.8a.tar.bz2 libelf-0.8.13.tar.gz mpfr-2.4.2.tar.xz duma_2_5_15.tar.gz glibc-2.13.tar.bz2 linux-3.10.2.tar.bz2 ncurses-5.9.tar.gz 执行 ct-ng build 开始制作: root@zjh:/home/work/crosstool# ct-ng build 在制作过程中,可以另外开一个终端,查看制作和编译的详细过程: root@zjh:/home/work/crosstool# tail -f build.log 制作完成后,将看到如下信息: 个人 QQ:809205580 技术交流群:153530783 个人博客:http://blog.csdn.net/zjhsucceed_329
[INFO ] Build completed at 20140612.004712 [INFO ] (elapsed: 74:49.55) [INFO ] Finishing installation (may take a few seconds)... 然后在我们指定的安装目录下已经安装好了交叉编译器: root@zjh:/home/work/crosstool# ls /opt/arm-cortex_a8-linux-gnueabi-4.7.3/ arm-cortex_a8-linux-gnueabi bin build.log.bz2 include lib libexec share 配置环境变量:在/etc/profile 文件的最后添加一行: export PATH=/opt/arm-cortex_a8-linux-gnueabi-4.7.3/bin:$PATH 执行 . /etc/profile 使配置生效 注意:这里执行的命令为 . ,相当于 source /etc/profile ,这只是在当前终端生效,要使所有生效, 还得重启系统。 root@zjh:/home/work/crosstool# arm-linux-gcc -v Using built-in specs. COLLECT_GCC=arm-linux-gcc COLLECT_LTO_WRAPPER=/opt/arm-cortex_a8-linux-gnueabi-4.7.3/libexec/gcc/arm-cortex_a8-linux-gnuea bi/4.7.3/lto-wrapper Target: arm-cortex_a8-linux-gnueabi Configured with: /home/work/crosstool/.build/src/gcc-4.7.3/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-linux-gnu --target=arm-cortex_a8-linux-gnueabi --prefix=/opt/arm-cortex_a8-linux-gnueabi-4.7.3 --with-sysroot=/opt/arm-cortex_a8-linux-gnueabi-4.7.3/arm-cortex_a8-linux-gnueabi/sysroot --enable-languages=c,c++ --with-arch=armv7-a --with-cpu=cortex-a8 --with-tune=cortex-a8 --with-float=softfp --with-pkgversion='crosstool-NG 1.19.0' --enable-__cxa_atexit --enable-libmudflap --disable-libgomp --disable-libssp --disable-libquadmath --disable-libquadmath-support --with-gmp=/home/work/crosstool/.build/arm-cortex_a8-linux-gnueabi/buildtools --with-mpfr=/home/work/crosstool/.build/arm-cortex_a8-linux-gnueabi/buildtools --with-mpc=/home/work/crosstool/.build/arm-cortex_a8-linux-gnueabi/buildtools --with-ppl=/home/work/crosstool/.build/arm-cortex_a8-linux-gnueabi/buildtools --with-cloog=/home/work/crosstool/.build/arm-cortex_a8-linux-gnueabi/buildtools --with-libelf=no --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm -L/home/work/crosstool/.build/arm-cortex_a8-linux-gnueabi/buildtools/lib -lpwl' --enable-threads=posix --enable-target-optspace --disable-nls --disable-multilib 个人 QQ:809205580 技术交流群:153530783 个人博客:http://blog.csdn.net/zjhsucceed_329
分享到:
收藏