您的位置 首页 电源

嵌入式linux新手入门手记-建立根本作业渠道

当然,本人已经不是电子控制器开发的新手了。从事单片机,DSP开发十多年,但是一直没有接触过嵌入式linux。2014年初由于公司的项目需要,决定引入嵌入式linux的平台进行产品研发,从这个时候开

  当然,自己现已不是电子控制器开发的新手了。从事单片机,DSP开发十多年,可是一向没有触摸过嵌入式linux。2014年头因为公司的项目需求,决议引进嵌入式linux的渠道进行产品研制,从这个时分开端正式触摸嵌入式linux,并开端在linux上进行作业。到现在差不多1年半,现在将这个进程从头整理出来,和我们一同同享,一起也给自己留一个记载。

linux操作系统文章专题:linux操作系统详解(linux不再难明)

  “嵌入式linux新手入门手记”会是一个系列,记载我从第一次正式开端在linux渠道作业,到完结项目的进程中各问题的处理进程。当然,作为作业经历的记载,这个手记的系列不评论理论方面的常识,仅仅忠诚的记载问题,以及问题的处理进程和办法。

  首要在这儿介绍一下我的开发渠道:TI的AM335x的渠道,硬件现已调试完结,在本手记中将不进行硬件方面的记载。首要需求的功用是:USB接口单点触摸屏,1024*768 TFT-LCD显现,GUI的用户程序完成人机交互,100M以太网,不需求3D以及图形加速,256M DDR2,256M nand,一个SD卡槽,一个RS232接口。

  首要,要进行嵌入式linux开发,当然需求树立核算机的作业渠道,考虑作业的便利和功率,决议在核算机上装置独立linux系统,和window做成双引导。

  2010年时用过一段时间的ubuntu,所以决议仍是运用ubuntu,在ubuntu的官网上下载32位版别的14.04(64位的系统驱动程序比较难找)。运用ubuntu引荐的Universal-USB-Installer-1.9.5.9东西,将ubuntu的装置镜像写入到一个规范的4GU盘上(规范的意思是指不要有杂乱无章的功用,可能会导致兼容性问题而无法发动ubuntu装置程序。写入时会导致U盘的内容悉数丢掉,需求先备份U盘的文件)。

  在windows7的核算机办理中发动磁盘办理器,我的核算机硬盘是500G的,分为2个分区,并格局化为2个磁盘:C(190G)和D(其他空间),在磁盘办理器中对D分区进行紧缩,紧缩出100G的磁盘空间出来,对这个紧缩出来的100G空间不要做其他处理,退出磁盘办理器。

  从头发动核算机并进入到BIOS中设置发动次序,使核算机可以从U盘发动。运用制造好的Ubuntu装置U盘发动核算机后,将进入到ubuntu的体会系统中,挑选装置,然后依据装置的提示进行,这儿需求留意2点,一是言语的挑选,最好在装置时挑选中文,这样防止后续设置ubuntu时显现、输入法等的问题。二是最好不要手动指定装置分区,有ubuntu装置程序主动对之前区分出来的100G空间进行办理,我的核算机装置有6G的内存,所以装置程序将100G空间区分为一个6G的交流分区,其他用于装置ubuntu。然后ubunut会问询是否和其他操作系统共存时,一定要挑选和其他操作系统共存,不然会导致装置完ubuntu后无法发动windows的问题。

  ubuntu14.04的装置仍是比较智能的,根本不需求自己的其他干与,就主动装置完结了。

  在装置完结后,需求对ubuntu进行一些设置,这儿就不再过多描绘,下面仅对一些和后续嵌入式linux开发有关的进行阐明:

  别的,我运用的shell是bash,而ubuntu14.04装置后默许用的是dash,需求修正为默许运用bash。

  1、装置tftp服务。嵌入式linux开发,尤其是uboot和kernel相关的开发,需求不断的修正MLO,u-boot,uImage等,这些文件是需求写入到am335x的板载flash上的,假如每次都是用SD,CCS,烧写东西等,是一个很费事的作业。因为uboot支撑tftp下载文件并烧写flash,这是一个较为快捷的方法。

  在自己作业目录home/XXXX下树立一个空目录,取名为tftp;

  给这个目录赋予读写等权限:sudo chmod 777 ./tftp;

  装置tftp服务:sudo apt-get install xinetd tftpd-hpa tftp-hpa;

  装置完结后,会主动从头发动xinetd,这时在/etc下会呈现xinetd.d目录;

  进入到这个目录中,履行sudo touch tftpd;

  然后履行sudo gedit ./tftpd,在tftpd文件中增加以下内容并保存退出:

  service tftp

  {

  disable=no

  socket_type=dgram

  wait=no

  user=root

  protocol=udp

  server=/usr/sbin/in.tftpd

  server_args=-s /home/XXXX/tftp

  log_on_success=PID HOST DURATION

  log_on_failure=HOST

  }

  修正/etc/inetd.conf文件:sudo gedit /etc/inetd.conf,增加以下内容:

  tftp dgram udp wait

  root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /home/XXXX/tftp

  修正/etc/default/tftpd-hpa:

  #/etc/default/tftpd-hpa

  TFTP_USERNAME="tftp"

  TFTP_DIRECTORY="/home/XXXX/tftp"

  TFTP_ADDRESS="0.0.0.0:69"

  TFTP_OPTIONS="–secure"

  #Defaults for tftpd-hpa

  RUN_DEAMON="yes"

  OPTIONS="-1 -s /home/XXXX/tftp"

  保存并退出后,从头发动tftp服务:sudo /etc/init.d/xinetd restart

  sudo /etc/init.d/tftpd-hpa restart

  2、装置nfs服务。nfs服务是嵌入式linux开发一个非常重要的服务,运用这个服务,可以将核算机上的一个文件目录挂载为am335x运转时的根文件系统,这样防止不断烧写flash。

  树立一个文件夹,用于nfs服务,名称为nfs;

  为装置nfs服务,修正ubuntu的软件源,假如不是“main server”,修正为“main server”,然后点击close,弹出对话框点击reload,然后等候处理完毕;

  装置nfs服务,sudo apt-get install portmap nfs-kernel-server

  sudo apt-get install portmap nfs-common

  装备同享文件,修正/etc/exports,在文件结尾增加一行:/home/XXXX/nfs *(rw,sync,no_root_squash)。用于设置nfs目录的作业形式,以及用户进入该目录的权限为root;

  从头发动nfs服务,sudo /etc/init.d/portmap restart

  sudo /etc/init.d/nfs-kernel-server restart

  查看nfs服务是否现已装备成功。

  3、设置核算机的网卡。为开发嵌入式linux,我的核算机装置了2个网卡,一个USB接口的无线网卡,用于上网。别的一个100M PCI接口的有线以太网卡,用于衔接am335x。将有线以太网卡的IP地址设置为固定:192.168.1.50,子网掩码255.255.255.0,其他可以不设置。

  4、下载TI的am335x的开发东西包,这儿我运用的是2011年取得的开发包,其间uboot是2011版,以及linux3.2.0。合作这个开发包运用的是arm-none-linux-gnueabi和arm-arago-linux-gnueabi穿插编译东西。因为种种原因,公司决议运用TI-SDK-AM335X-01.00.00.00中的穿插编译东西,是arm-linux-gnueabihf-gcc 4.7.3。

  将TI的SDK解紧缩到/home/XXXX/ti-sdk-am335x-evm-01000000目录;

  将uboot2011解紧缩到/home/XXXX/uboot目录;

  将linux3.2.0解紧缩到/home/XXXX/kernel目录;

  修正上述目录的权限,使得XXXX具有对这些目录以及其文件的读写权限。

  5、修正环境变量装备,进行第一次编译uboot和kernel。

  修正~/.bashrc文件,将编译uboot和kernel需求的环境变量加入到文件中,并使收效。 下面是需求加入到~/.bashrc中的内容:

  PATH=$PATH:/home/XXXX/ti-sdk-am335x-evm-01000000/linux-devkit/sysroots/i686-arago-linux/usr/bin:/home/XXXX/uboot/am335x/tools:

  上述/home/XXXX/uboot/am335x/tools目录,在编译uboot时,会生成后续用于制造uImage文件的东西,用来编译kernel,所以在这儿要加入到PATH中。不然后续编译kernel时会呈现过错。

  编译uboot时会生成用于制造kernel的image的东西,这些东西在编译kernel是被make调用,所以在编译kernel时,有必要确保之前现已正确编译或uboot,而且没有对uboot履行过clean。

  6、进入到uboot的目录中,修正两个sh文件,用于后续作业运用。

  mkclean.sh,用于履行clean操作:

  #/bin/sh

  make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm O=am335x distclean

  上述履行的指令,运用arm-linux-gnueabihf穿插编译器,arm系统的CPU,输出文件保存到./am335x目录,履行distclean铲除所以之前的临时文件。

  mkboot.sh,用于履行编译操作:

  #/bin/sh

  make -j4 CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm O=am335x am335x_evm

  上述履行编译uboot,其间-j4奉告编译器运用4线程进行编译,这个设置取决于核算机CPU的核心数,可以加速编译的进程。

  ARCH=arm指定方针CPU的系统架构。O=am335x指定文件输出目录为./am335x,编译完毕后,可以在这个目录下找到MLO,u-boot.img等文件。

  am335x_evm选项奉告编译器运用这个板的装备对uboot进行编译。

  7、进入到kernel目录中,修正三个sh文件,用于后续编译和装置kernel:

  mkcln.sh,用于履行clean操作:

  #/bin/sh

  make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm distclean

  make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm am335x_evm_defconfig

  这个sh将进行铲除临时文件的操作,然后运用arm335x_evm_defconfig文件对kernel进行编译装备。

  mkkn.sh,用于履行编译操作:

  #/bin/sh

  make -j4 CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm uImage

  make -j4 CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm modules

  穿插编译kernel并生成uImage文件。

  穿插编译可动态加载的modules。

  mkins.sh,用于装置kernel:

  #/bin/sh

  make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm modules_install INSTALL_MOD_PATH=/home/XXXX/nfs

  cp ./arch/arm/boot/zImage /home/XXXX/nfs/boot

  将编译好的内核zImage和modules文件装置到nfs文件目录中。

  在编译完结后,在kernel/arch/arm/boot目录下会生成uImage文件,这个是linux kernel可引导文件,需求将这个文件拷贝到nfs或许tftp目录中。

  8、编译后的几个重要文件:

  编译uboot将会生成2个重要文件,MLO和u-boot.img。其间MLO是第2次引导程序,am335x复位后,内部otp中的引导程序会发动,然后依据LCD_DATA管脚的设置来加载指定存储器上的MLO。

  MLO运转后,将加载相应存储器上的u-boot.img。

  u-boot.img发动后,将依据bootargs和bootcmd环境变量设置的参数,挑选加载uImage,并发动uImage。

  uImage是kernel的可履行内核镜像文件。

  9、开发嵌入式linux,需求将am335x经过串口和核算机衔接,并运用核算机的超级终端 进行操作。ubuntu下的minicom比较好用。

  现在的核算机一般都没有规范的RS232接口,我自己规划了一块CH340T的通讯转接板,一端衔接am335x的UART0,别的一端接核算机的USB口,在芯恒的官网可以下载到ubuntu的驱动程序,下载下来后insmod成功后,/dev下可以看到ttyUSBX(X取决于核算机,一般为ttyUSB0)。

  这样运用USB模仿串口和am335x通讯,便利运用。

  下一篇将叙述第一次发动am335x。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/116175.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部