历史上的今天
返回首页

历史上的今天

今天是:2024年12月22日(星期日)

2020年12月22日 | 嵌入式Linux学习笔记(基于S5PV210 TQ210)

2020-12-22 来源:eefocus

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


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,下载后解压到合适的位置,比如我自己的环境是:



然后打开VMware-workstation



先设置一下,选择Edit->Preferences


 设置虚拟机位置。

选择 View->Autofit Window,这样在VMware-workstation窗口大小改变时,ubuntu的大小会自动变换到合适的大小,前提是要安装VMware tools。

选择File->Open,定位找到刚才解压的文件夹,选中Ubuntu.vmx,然后打开。




然后单击 即可启动ubuntu系统,出现对话框


      选择I moved it



用户名为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的窗口大小会自动适应。

建立Windows到ubuntu的文件夹共享:

VM->Settings, 选择options, 选择Shared Folders,


单击右下角的Add添加要共享的文件夹,选中上面的Always enabled,确定后重启ubuntu系统。然后就可以在ubuntu下访问Windows下的文件夹了。例如我共享的E盘:

root@zjh:~# ls /mnt/hgfs/E/

http://www.crosstool-ng.org/

3.2       安装crosstool-ng的软件依赖包


apt-get installbison flex texinfo automake libtool cvs libncurses5-dev aria2 g++ subversiongawk 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             首先创建一个工作目录:

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 miscoptions  --->

                     (/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个工作,加快编译速度

       Targetoptions  --->

                     Floatingpoint: (softfp (FPU))  --->

                     指定使用软浮点

       Toolchainoptions  --->

                     (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

       OperatingSystem  --->

                     Linuxkernel version (3.10.2)  --->

                     选择内核版本,这里最好选大些,Linux内核都是向后兼容的。

       Ccompiler  --->

                     gccversion (4.7.3) --->

                     [*] Compile libmudflap

                     Libmudflap用于检查内存泄露,包括堆和栈,具体怎么用上网查资料。

       C-library  --->

                     glibcversion (2.13) --->

                     [*] Force unwind support (READ HELP!)

       Companionlibraries  --->

                     PPLversion (0.11.2) --->

                     CLooG version (0.15.11) --->

注意:在制作过程中,若出现版本不匹配的错误,重新配置正确的软件版本,再接着制作。

Save anAlternate 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.bz2expat-2.1.0.tar.gz  glibc-ports-2.13.tar.bz2 ltrace_0.5.3.orig.tar.gz  ppl-0.11.2.tar.lzma cloog-ppl-0.15.11.tar.gz  gcc-4.7.3.tar.bz2   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

制作完成后,将看到如下信息:

[INFO ]  Build completed at 20140612.004712

[INFO ]  (elapsed: 74:49.55)

[INFO ]  Finishing installation (may take a fewseconds)...

 

然后在我们指定的安装目录下已经安装好了交叉编译器:

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文件的最后添加一行:

exportPATH=/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-inspecs.

COLLECT_GCC=arm-linux-gcc

COLLECT_LTO_WRAPPER=/opt/arm-cortex_a8-linux-gnueabi-4.7.3/libexec/gcc/arm-cortex_a8-linux-gnueabi/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-NG1.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--with-local-prefix=/opt/arm-cortex_a8-linux-gnueabi-4.7.3/arm-cortex_a8-linux-gnueabi/sysroot--enable-c99 --enable-long-long

推荐阅读

史海拾趣

Elite Semiconductor Products Inc公司的发展小趣事

在电子产品领域,品质是赢得消费者信任的关键。Elite深知这一点,因此在生产过程中严格把控每一个环节,确保产品的品质达到最高标准。公司建立了完善的质量管理体系,从原材料采购到生产流程,再到产品检验,都严格遵循国际标准和行业规范。这种对品质的坚持,让Elite的产品在市场上赢得了良好的口碑,也为公司赢得了众多合作伙伴的信任。

Hitachi Metals公司的发展小趣事

随着汽车工业向智能化、电动化方向发展,Hitachi Metals敏锐地捕捉到了这一趋势带来的商机。公司加大了对汽车电子部件的研发和生产投入,特别是在汽车活塞环材料领域取得了显著成就。其生产的钢制活塞环材料在日本市场占据领先地位,不仅为众多汽车制造商提供了高质量的产品,还通过技术创新不断提升产品的附加值。此外,公司还积极拓展汽车电子控制单元(ECU)等关键部件的市场,进一步巩固了其在汽车电子领域的地位。

ELANTEC (Renesas )公司的发展小趣事

作为一家半导体公司,技术突破和创新是ELANTEC发展的核心动力。在移动通信领域,ELANTEC不断推出具有创新性的产品和技术,如低功耗、高性能的移动通信芯片等。此外,在汽车电子、工业控制等领域,ELANTEC也取得了多项技术突破,为客户提供了更加优质的产品和服务。

苏州锋驰(Feng)公司的发展小趣事
如发现元件损坏(如二极管、电阻、开关管等),应及时更换相同规格的元件。
BCD Semi(Diodes)公司的发展小趣事

作为一家高科技企业,BCD Semi(Diodes)公司深知创新是发展的核心动力。因此,公司始终将研发投入作为重中之重,不断加大对新技术、新产品的研发力度。通过持续的创新驱动,公司成功推出了一系列具有自主知识产权的高性能模拟半导体产品,为公司的长远发展奠定了坚实基础。

Bharat Electronics Ltd公司的发展小趣事

作为电子行业的领军企业,BEL始终注重技术创新和研发。公司不断投入大量资源用于新产品的研发和创新,努力引领行业趋势。近年来,BEL在无人机、太阳能电池组等领域取得了显著成果,推出了一系列具有创新性和市场竞争力的产品,为公司的持续发展注入了新的活力。

问答坊 | AI 解惑

算法求助:自动进样器

我们项目要做个自动进样器,由电机驱动运动,要求速度为300mm/s,速度挺快的,所以启动和停止时必须匀加速,在驱动里通过产生高低脉冲使电机运转。 nCounts为脉冲个数,nTmpDelay为延时数               &nbs ...…

查看全部问答>

DIRECTSHOW preview时候改变图片显示的大小

我用DIRECTSHOW 想在 preview时候改变图片显示的大小? 哪位大吓知道?…

查看全部问答>

wince rtc开机

各路高手,请问WINCE通过RTC闹钟来实现定时开机要怎么做呀?原理是什么呀?注意不是通过RTC来唤醒系统哦,是开机!…

查看全部问答>

VxWorks6.3 版本定时器设置问题

我们所使用的Vxworks版本是6.3的, 我想使用 timer_create, timer_connect等API进行设置定时器, 我们进行了设置, 步骤也是跟VxWorks文档介绍的一样, 先调用timer_create, 然后再timer_connect进行处理程序的关联, 最后再调用timer_settime函数进行设 ...…

查看全部问答>

再提供一个小作品:EK-STM3210E大容量仿真学习套件上市啦!

仿真器 - 内嵌ST-LINK II仿真器,支持STM32F10x标准系列和扩展总线系列Cortex-M3 MCU - USB2.0全速,USB供电 - 支持评估系统或用户目标系统仿真 - 下载速度大于5K/秒 - 通过跳线 ...…

查看全部问答>

STM8S103串口问题,两天了都

用的芯片是STM8S103F3.使用串口1,内部时钟,查询发送,中断或者查询接收疑问:STM8的管教复用是不是,你配置了串口,那么相应的两个管脚IO就自动成为RXD和TXD?现在的把收发两个管脚直接短路,程序里面一直在发送,用万用表测试电压为1.8V左右,估 ...…

查看全部问答>

飞思卡尔K30好使不???急急急 !!!

哪位大神用过飞思卡尔arm的片子,K30系列的???好使不好使啊???谢谢大家!!!…

查看全部问答>

Beaglebone DIY继续 让板子的继电器动起来和输入(字符驱动)。

relaydrv.c驱动: relaytest.c应用程序: Makefile: 测试时自己设置一下,用到如下命令: mknod /dev/relaytest c 251 0 insmod relaydrv.ko ./relaytest rmmod relaydrv 有几个没响。不知道是否电路原因,到时再查。 串口显示: ...…

查看全部问答>

雕刻机自制PCB电路板

雕刻机买回来一年多了,平时就是用来做一下外壳和五金件的样品加工,但从来没有用来做过PCB电路板,当时买这个机器的时候,同时也考虑做电路板的,所以在精度方面也考虑到了。尽管在机器的控制方面比较熟悉,但是第一次做电路板,尽管在参考了网上 ...…

查看全部问答>

转贴--yijian版袖珍示波器DS203开源资料

转贴--yijian版袖珍示波器DS203开源资料 有整套的源代码开放,可供有兴趣者共同学习。 itfans.taobao.com 技术指标:     DS203是一个5踪4线的通用电子工程任务的数字示波器。它的基于ARM Cortex M3内核的CPU,采用FPGA实现对外接 ...…

查看全部问答>