结合Yocto Qemu与Eclipse单步调试开发Linux Kernel

使用说明 在以前的博客中说明过使用Qemu + BuildRoot来构建一个虚拟的嵌入式开发平台, 还写过使用Yocto + Qemu来构建一个Cortex-A9的嵌入式开发调试平台. 同时在很久以前也写过使用Eclipse + JLINK来调试ARM9. 而在工作学习中,有时候, 对内核源码的研究中, 需要单步对linux内核跟踪调试, 且大部分是关注与内核中某些组件的实现, 例如MM, Binder驱动, 这个时候直接使用Qemu + Eclipse来调试与开发就比使用硬件方便快捷得多了. 那么这篇文章中将使用:

Continue reading »

【EVB-335X-II试用体验】 基于Yocto的嵌入式的敏捷项目开发:以电子相册为例

EVB 335X-II有一个800*480的屏幕,如果放在家里,那么我们可以做一个电子相册,在家里放着的时候,可以自动播放图片幻灯片。这篇博客,我们将使用开源方案以及Yocto来构建和完成这个小项目。 方案选择我们可以自己使用Qt/C++甚至Python,C来写一个直接操作Framebuffer,并针对不同size的图片进行适配和Zoom In/Out缩放处理,还需要对不同图片的加载进行判断,同时如果我们还希望在图片上面显示字的话,还需要一些叠加处理,然后我们还需要进行交互的API暴露,例如让user可以查看Next与Previous Picture; 网络支持;缩略图显示支持;网络图片支持;透明显示;放大缩小支持;EXIF信息解析与显示与叠加;只显示特定特征的图片;抗锯齿。 可以看到,本来想着是一个简单的电子相册,如果想去做好,并不容易。需要考虑的方面很多。 这里我们使用feh这个开源的方案。 feh有诸多的优点,feh使用imlib2并基于X11来显示,同时支持插件化配置,还支持网络。 其官方列出的features有: Various operation modes: Slideshow: Show all files in or below

Continue reading »

【EVB-335X-II试用体验】 Yocto环境的建立及Rootfs的构建与使用:QT与触摸屏(3)

前面我们已经构建好了基本的Rootfs,并且可以启动起来的,但是我们也会发现这个roofs非常的小,相当于一个busybox搭建的一样,当然这个无法满足我们的需求,因此我们下面将开始扩展我们的rootfs,添加一些工具让我们可以方便的开发。 显示问题 使用前面的方法启动后,我们会发现在uboot阶段是有图片的,但是在linux之后却没有发现有boot logo,然后启动之后我们也没有发现有/dev/fb0这个设备,同时也没用在dmesg中找到fb相关的内容,而device driver中却已经配置好了驱动: 因此可以推断出我们的驱动并没有probe,那么就可能是我们的device没有和driver match,或者根本就没有加载这个驱动,然后我们注意到在内核中的启动参数中有一个lcd相关的参数: 当然也可以认为那个consoleblank=0也是相关的,关于这个consoleblank,其实是这样子的: 我们在内核中配置了使用console on framebuffer,那么过10分钟,就会自动关闭掉这个console,其实就相当于关闭掉了这个屏幕,所以这里将其设置为0是为了不让屏幕在10分钟之后关闭,变成黑屏。 因此我们改一下bootargs,重新启动: set ipaddr 192.168.1.111;set serverip 192.168.1.100 set bootargs ‘console=ttyO0,115200n8

Continue reading »

【EVB-335X-II试用体验】 Yocto环境的建立及Rootfs的构建与使用(2)

在前面的文章中,我们已经使用Yocto构建出一个Rootfs,但是因为WatchDog的缘故,启动没有多久就重启了。下面我们来解决这个问题。 WatchDog的Disable 我们既可以在Rootfs启动后定期喂狗,也可以直接在kernel中disable Watchdog,在开发初期我们选择在内核中直接去掉比较快。 内核配置 使用make menuconfig来配置,结果出现了错误: 这个明显是因为确实Libary的问题,这个缺少的是libreadline,因此安装即可: sudo apt-get install libreadline5-dev 然后在menuconfig中,我们可以查到Watchdog的位置,因此我们找到disable即可: 然后重新编译,再次测试发现还是会重启。看起来是uboot中就开启了,然后内核中还是需要去关掉才行,或者直接在uboot中需要关闭。 然后将板子开启到uboot中,停留一会发现确实会自动重启,因此可以确定是uboot中的开启了watchdog。然后查看用户手册,可以看到其Watchdog电路如下: 因此我们只需要短接J3即可。 如果想在uboot中disable,那么可以将下面几个宏去掉: 然后重新编译烧写即可。 暂时我们就先这样子做,以后我们将会在Yocto中添加代码来对应此问题,对于如何喂狗可以参考官方给的代码,代码位于: test_code/watchdog/main.c

Continue reading »

【EVB-335X-II试用体验】 u-boot与kernel的编译以及本地repo的建立

解压了网盘下载后的压缩包后,找到了doc目录,但是在这个目录中,没有找到uboot与kernel的编译说明。后来再找才发现是在nand的doc子目录中。下面就说明一下,各个make过程中都做了点什么,方便大家对整个编译过程的理解。 内核与u-boot的编译 生成配置文件 配置如下: 可以看到有里面有说他DRAM的宏定义 这些宏的定义位于boards.cfg中: 然后makefile会生成下面整个头文件: 可以看到整个头文件里面的各个宏就是前面boards.cfg中定义的。这里面有board位置,board的名字,因此这样子makefile就知道该去编译哪个board里面的文件了。 最后我们再make 即可生成: SPL u-boot.img 这两个文件,分别为第二阶段与第三阶段的bootloader,第一阶段的为ROM Code。 内核的编译 内核中直接make uImage即可。 repo的建立 板子自带的内核版本是3.2,没有试用device tree,但是但是完善。我们后面也会直接使用官方的uboot与kernel。

Continue reading »

【EVB-335X-II试用体验】 Yocto环境的建立及Rootfs的构建与使用

前面的文章中已经建立起kernel与bootloader的repo,这篇开始,我们将先建立Yocto编译环境,并编译出基本的rootfs。 Yocto基本meta的获取 我们需要好几个meta与poky 首先需要保证至少有65GB的Free磁盘空间或者更多,创建一个目录: mkdir Yocto 然后clone各个meta与poky 第一个是meta-bbb: git clone git://github.com/jumpnow/meta-bbb -b original/jethro 然后是poky与其他的: git clone git://git.yoctoproject.org/poky.git -b original/jethro git

Continue reading »

Yocto tips (20): Yocto中qemu模拟器的使用,以zynq Cortex-A9为例

在以前的文章《使用Buildroot与Qemu学习ARM linux IIC驱动》中,写到过使用qemu来模拟使用ARM Linux,那个时候借助的是buildroot,这次我们使用Yocto来做同样的事情。 优点 使用Qemu的好处在于,当我们在开发Userspace的程序时,可以在没有硬件的情况下完成测试。 同时不像以前一样我们需要自己去编译qemu,这次我们使用Yocto编译出来的native qemu来模拟。省去了我们手动编译可能出现的问题。 选择 这里的选择指的是,我们在local.conf中指定MACHINE变量的值。我将其分成两种: 1. 默认的qemuarm 以前我一直使用这个,但是这个模拟的是一个ARM9的处理器,各种外设功能不足,我们希望可以模拟一个更高ARM架构的SoC。 2. Xilinx的zynq-9:xilinx-zynq-a9 在Qemu的模拟中,据个人有限经验对不同的板子的模拟情况的了解,zynq在Qemu中有较好的支持。同时xilinx对此也有不少的文档,同时xilinx的一些板子的支持属于Qemu默认的测试与支持Machine,因此选择Xilinx的板子来模拟比较合适。 同时,我们关注的是ARM相关,因此使用Cortex-A9比较好,对此,我们选择xilinx-zynq-a9。 在我们的Host PC中如果安装了qemu-system-arm,那么我们可以看到其支持的板子里面是有这个板子的:

Continue reading »

Yocto i.MX6 (TQIMX6) (04) : 使用mjpg-streamer做一个WebCam Server

libjpeg的编译 下载后直接对configure指定即可。或者使用Yocto编译,参考我的其他与Yocto相关博文。 mjpg-server的编译 mjpg-streamer已经很老了,且sourceforge中的下载文件,默认是deb格式的,因此需要找到对应的源代码 下载地址:http://sourceforge.net/projects/mjpg-streamer/files/mjpg-streamer/Sourcecode/ 编译 下载之后,解压,并将所有Makefile中的CC变更成接受Preset的格式,即将:

变更成:

为了防止少修改,还可以用grep看看都有哪些文件有:

结果如下: 对于修改Makefile,可以使用sed与awk组合完成,命令如下:

然后再使用grep看看文件是否都完成了变更。 将mjpg-streamer的库output文件放到target上 lib库so文件 直接在target中使用scp或者其他方式放进去即可,下面是一个范例:

Continue reading »

Yocto i.MX6 (TQIMX6) (02) : USB Wifi (TP-Link WN821N等设备)AR9170的Linux内核支持与固件使用

说明 固件的下载见博客末尾。 Wifi模块 有一个TP-Link的WN821N的USB无线网卡,查到UbuntuPC上面用lsusb看了看: 内核支持 在内核中搜索lsusb输出的设备VID与PID,可以看到是有支持的,直接在内核中配置即可: 这个是Linux社区对这个USB Wifi的支持,在这个Menuconfig选项的help中的网站里面很多东西都已经无法下载了。 支持的设备 使用AR9170的设备有如下这些(来源于这个网页): Vendor [all]3ComAVMActiontecAirliveArcadyanAtherosCaceD-LinkH3CIO-DataNECNetgearPlanexProximSphaironTP-LINKWNCZ-ComZydasZyxel Product USB Vendor [all]0x04090x04bb0x057c0x05860x07d10x083a0x08460x0ace0x0cde0x0cf30x14350x16680x1b750x20190xcace USB Product [all]0x00230x00260x00270x02490x02b40x03000x03260x08040x093f0x10010x10020x10100x10110x12000x12210x34170x3a090x3a0f0x3c100x53040x84010x84020x90010x90100x90400x91700xf522 MaxPower

Continue reading »

Yocto i.MX6 (TQIMX6) (01) : 3.14.28内核的适配

Freesacle Yocto的环境配置与编译 到Freescale下载imx6 Linux Source Code,解压里面的fsl-yocto命名的压缩包得到Yocto setup手册:Freescale_Yocto_Project_User’s_Guide.pdf 然后按照里面的步骤操作即可编译出一个完整的distribution,当然很可能会因为网络或者一些Package早已不存在,或者因为大家都知道的原因而无法下载一些source code,而编译失败。 注意编译的目标选择imx6qsabresd,因为这个和我们的TQIMX6Q接近。 个人使用的步骤如下: 按照文档说明repo init会出错:

这是因为googlecode无法访问,所以特别指定其他的:

然后是repo sync

接着就是source

Continue reading »