嵌入式设备开发专题《tiny4412开发,嵌入式linux开发环境搭建》
嵌入式linux开发基础:
1.系统组成:
嵌入式linux系统的组成包括三部分:bootloader程序、linux内核、根文件系统
bootloader程序:系统上电后首先要执行的程序,主要功能是硬件初始化,为启动linux内核准备环境
linux内核:操作系统的核心部分,是一个单一的文件(zImage或uImage)
根文件系统:包括操作系统的一些系统工具,c函数库等
2.启动流程
系统上电后,启动bootloader程序,完成硬件的初始化工作--》将内核加载到内存,启动内核--》挂载根文件系统,启动一个用户进程init--》启动一个shell程序
3.交叉开发环境
交叉开发的原意是将编译和运行分开,在高性能的pc上进行编译(使用交叉编译器),在ARM板上运行经过pc编译的程序
嵌入式linux开发原理图:
嵌入式linux开发环境配置:
1.U-BOOT和内核配置:
U-BOOT源码:uboot_tiny4412-org.tar.bz2U-BOOT补丁文件:uboot.patch
内核源码:linux-4.4.19.tar.gz内核源码补丁文件:linux-4.4.19.patch
问:什么是补丁?
在linux内核社区中,补丁是通用语,你可以以补丁的形式发布对代码的修改,也可以以补丁的形式接收其他人所做的修改。增量补丁可以作为版本转移的桥梁。你不再需要下载庞大的内核源码的全部压缩,而只需给旧版本打上一个增量补丁,让其旧貌换颜。这不仅节约了宽带,还节省了时间。应用增量补丁,从你的源码树目录中运行:patch -p1 < ../patch-x.y.z
-----------------------------------------------------------------------------------------------------------------------------
解压,修改,编译U-BOOT,烧写到SD卡:(这里看官方文档写的,没什么好解释的!)
tar -jxvf uboot_tiny4412-org.tar.bz2
cd uboot_tiny4412
patch –p1 < ../uboot.patch//打补丁(提醒一下,-p1中的‘1’是“123”中的1)
make tiny4412_config
make
cd sd_fuse
make
sudo umount /media/FRIENDLYARM
cd tiny4412
sudo ./sd_fusing.sh /dev/sdb
等待烧写完毕
------------------------------------------------------------------------------------------------------------------------------
解压、修改、配置编译内核
tar -zxvf linux-4.4.19.tar.gz
cd linux-4.4.19
patch –p1 < ../ linux-4.4.19.patch//打补丁(提醒一下,-p1中的‘1’是“123”中的1)
make exynos_defconfig//这条命令会基于默认的配置为你的体系结构创建一个配置
make menuconfig//启动利用基于ncurse库编制的图形配置工具
这里会出现一个蓝色的GUI配置菜单(注意这时候虚拟机不能够缩放过小,不然配置菜单不能显示而且提示出错,我在这里犯了错)
General setup --->
(-xxxx) Localversion - append to kernel release 版本中加入自己的姓名拼音
DeviceDrivers --->
[*] Network device support --->
<*> USB NetworkAdapters --->
<*> Davicom DM96xxbased USB 10/100 ethernet devices
[*] USBsupport --->
<*> USB4640 HSIC toUSB20 Driver
配置完成后保存,保存后别忘记了一下工作,不然上面的配置就白做了!!
编译内核:make uImage LOADADDR=0x40008000 -j2(编译后得到内核路径:arch/arm/boot/uImage)
编译设备树:make dtbs(编译后得到设备树路径:arch/arm/boot/dts/ exynos4412-tiny4412.dtb)
---------------------------------------------------------------------------------------------------------------------------
2.把pc机上编译的内核加载到开发板内存中
SD卡插入开发板,启动方式选择SD卡启动,上电后3s内按下键盘上任意键
putty串口终端输入:
然后运行命令:save
这里介绍一下U-BOOT常用命令:
help | 帮助,列出所有命令 |
printenv | 打印环境变量 |
setenv | 设置环境变量(格式:setenv 变量名 变量值) |
saveenv | 保存设定的环境变量(例如:bootcmd、bootargs) |
save | 保存所做的配置 |
bootm | 直接跳转到可执行文件的入口地址并执行 |
bootargs(非命令) | 启动linux内核时,传递给内核的字符串参数 |
bootcmd(非命令) | 自动启动的命令序列 |
敲以下代码:
开发板串口终端putty | linux虚拟机 |
dnw 0x40600000 | sudo dnw arch/arm/boot/uImage |
dnw 0x41000000 |
sudo dnw arch/arm/boot/dts/ exynos4412-tiny4412.dtb |
bootm 0x40600000 – 0x41000000 |
开发板端下载内核、设备树以及启动内核的这3条命令可设置进U-BOOT环境变量bootcmd:
setenv bootcmd dnw 0x40600000\;dnw0x41000000\;bootm 0x40600000 - 0x41000000//自动启动的命令序列
save
这样下次启动开发板就会自动执行者三条命令
3.内核启动后,自动挂载网络文件系统,登录开发板的linux系统
串口终端输入:uname –r查看内核版本
4.交叉开发
在pc机上,交叉编译一个"hello.c"程序,在开发板上运行
在pc机上交叉编译源码hello.c:
arm-linux-gcc -g hello.c -o hello-arm
将编译好的程序hello-arm拷贝到共享目录中:
cp hello-arm /opt/roofs
在开发板上运行程序hello-arm(在putty终端上操作)
./hello-arm
这时候你该看到hello world!
5.交叉调试
pc机上的调试器arm-linux-gdb通过网络与目标板的gdbserver通信,由gdbserver去控制调试目标,具体操作如下:
(1)将交叉编译器里面的gdbserver复制到开发板的根文件系统/opt/rootfs/usr/bin目录(gdbserver在解压后的交叉编译器里面:/opt/crosstool/4.8.2/arm-none-linux-gnueabi/debug-root/usr/bin)
在pc机上运行:cp /opt/crosstool/4.8.2/arm-none-linux-gnueabi/debug-root/usr/bin/gdbserver /opt/rootfs/usr/bin/
(2)在开发板(putty串口终端操作),启动调试服务器(gdbserver)
gdbserver 192.168.1.230:2345 ./hello-arm(其中192.168.1.230表示开发板的ip地址,2345表示端口号)
(3)在pc机上启动交叉调试器调试程序
arm-linux-gdb hello-arm(这里要注意hello-arm在什么目录下,我就不多说了)
进入调试界面后,要输入下面的命令来连接目标版的调试服务器
(gdb)target remote 192.168.1.230:2345
注意:gdbserver只是提供了交叉调试过程中pc机和开发板通信的一种方法(和tcp/ip协议相似),而真正进行调试的是arm-linux-gdb命令(虚拟机上安装,开发板一般不会安装)
嵌入式设备开发专题《tiny4412开发,嵌入式linux开发环境搭建》相关推荐
- 保姆级教程:Linux(Ubuntu 18.04)下VSCode配置与嵌入式开发平台X2000_Halley5调试环境搭建
保姆级教程:Linux(Ubuntu 18.04)下VSCode配置与嵌入式开发平台X2000_Halley5调试环境搭建 写在前面 配置VSCode的编译环境 配置VSCode的gdb调试环境 配置 ...
- <Linux开发>linux开发工具- 之-TFTP
<Linux开发>linux开发工具- 之-TFTP tftp命令的作用和nfs命令一样,都是用于通过网络下载东西到DRAM中,只是tftp命令使用的TFTP协议,Ubuntu主机作为TF ...
- linux 国产化 gtk图形界面开发 go和c++环境搭建
linux 国产化 gtk图形界面开发 go和c++环境搭建 一.c++环境搭建 1.解决系统自带gcc无法编译gtk的问题 sudo apt-get install build-essential ...
- <Linux开发>linux开发工具- 之-geany编辑器
<Linux开发>linux开发工具- 之-geany编辑器 安装命令: sudo apt-get install geany 使用方法: 命令: geany 文件路径名 &
- <Linux开发>linux开发工具- 之-samba共享文件夹
<Linux开发>linux开发工具- 之-samba共享文件夹 本文章主要讲解ubuntu下的文件 能够 在windows下访问的实现.目的是方便文件在Windows下操作,便于开发. ...
- <Linux开发>linux开发工具- 之-开发使用linux命令记录
<Linux开发>linux开发工具- 之-开发使用linux命令记录 本文章主要记录开发过程中涉及使用的linux命令. 1.查看磁盘大小分区情况 命令: df -hl` 可查看分区的路 ...
- linux环境 前端开发环境搭建,Linux运维知识之linux 前端环境搭建
本文主要向大家介绍了Linux运维知识之linux 前端环境搭建,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. 1.下载node.js 2.在linux 里使用wget命令 w ...
- 全志A33开发板vstar编译环境搭建
全志A33开发板vstar编译环境搭建 安装系统 全志提供的vstar的SDK使用内核linux-3.4.39, 在编译过程中,要用到一个文件gen_check_code,位于linux-3.4/ar ...
- Python 网站开发(一)环境搭建
前些天看到小阳买回来的一本 Python 基础教程,于是就产生了使用 Python 来开发一个小博客的想法.这个 Python 网站开发系列文章将不会过多说 Python 基本语法,主要是面向实践的. ...
- 使用Eclipse JEE+Mtj+Nokia S60 V3SDK开发J2ME应用的环境搭建
使用Eclipse JEE+Mtj+Nokia S60 V3SDK开发J2ME应用的环境搭建 2010-04-07 16:53 在Nokia S60 V3下进行J2ME应用程序开发,需要搭建 Noki ...
最新文章
- Vue+Video.js播放m3u8视频流(海康威视摄像头+RTMP服务+FFmpeg)
- 2013 第4届 蓝桥杯 黄金连分数【详解】
- ConnectionString Property - ADO
- mysql优化varchar索引_MySQL优化--概述以及索引优化分析
- linux 特定用户ssh,linux - 如何在登录后将SSH用户限制为一组预定义的命令?
- android技术总结
- JS中的数组排序函数sort()
- Gif动图体积如何缩小?分享一招快速压缩动图的方法
- C语言:封装图形面积公式
- 【261期】为什么 BigDecimal 类不能使用 equals() 方法做等值比较?
- 红孩儿编辑器的模块设计6
- maximo跟java_maximo遇到的错误问题
- php实现跑马灯闪亮,JavaScript_基于jquery实现的文字向上跑动类似跑马灯的效果,想实现一个类似跑马灯的效果, - phpStudy...
- 2.8 STM32_按键扫描_安富莱
- tecplot改变x轴y轴
- linux如何进入文件编辑,Linux 文件编辑工具
- 哈工大计算机系王晓龙,林磊,讲师,2004获得哈尔滨工业大学计算机应用专业工学博士学位 ......
- 杨辉三角循环队列实现(数据结构c语言版)
- cuda10.1安装
- You probably need to get an updated matplotlibrc file from解决方法