平痛新指导教师: 吕祖成 丁度树
1、 实训的目的
嵌入式linux系统开发实训通过把理论教学与实践教学紧密的结合在一起,将所掌握的理论知识应用于实践中来,从而加深对所学理论知识的理解并培养基本的实际应用和产品开发能力。
avcool
(1) 主要技术指标和要求
A、用u-boot2011.06版本的源码移植到SBC3X平台,并测试RAM、NAND、MMC、I2C、ETH的支持。
B、用arago PSP03.00.01.06版本的源码移植到SBC3X平台,并调试LCD、触摸屏,AT24(I2C),按键驱动,LED,使其能正常工作。
D、以上三项内容,学生可以自选一项作为本次实训的内容,有条件的学生可以三项都做,也可以小组分工形式完成。
(2) 实训计划与开展步骤
● 开发环境搭建
在PC机上搭建好开发平台,安装必要的开发工具,如串口工具,代码阅读工具,git,交叉编译工具链等。
● 开发板的熟悉
开发板的熟悉,先认真阅读用户手册的内容,动手实践用户手册里的操作。了解开发板的基本使用,linux系统的使用与设置,构建嵌入式linux的软件开发环境,构建开发板的软件
开发环境等等。
● U-Boot的移植与调试
克隆u-boot源码到本地仓库,参考TI的EVM板进行移植。移植的步骤请查看书本的介绍或网上查相关资料。
u-boot的测试:
引导系统正常启动。(基本要求)
测试RAM、NAND、MMC、I2C、ETH的支持并进行调试,可参照参考资料里的u-boot测试用例文档。(不做硬性要求)
● Kernel的移植与测试
克隆kernel的源码到本地仓库,参考TI的EVM板进行移植。移植的步骤请查看书本的介绍或网上查相关资料。
内核的测试:内核的正常启动。(基本要求)
调试LCD、触摸屏,AT24(I2C),按键驱动,LED,使其能正常工作。(不做硬性要求)
● linux串口应用编程
编写一个自收自发的串口应用程序,可参考书本上的串口编程的例子。
串口程序测试:通过PC机的串口助手测试。(基本要求)
扩展功能:可通过配置参数设置串口的波特率,具有等待超时功能。
arma3、实训内容实现参考
● 内核移植步骤和驱动调试参考
I、基本移植步骤:
1.修改顶层的Makefile
CROSS_COMPILE ?= /usr/local/arm/arm-2009q1/bin/arm-none-linux-gnueabi-
2.复制mach-xx/board-xx.c参考板文件,然后在相应的目录下的Kconfig和Makefile添加目标板;
3.修改board-xx.c的MACHINEID;
4.make 参考板的xx_deconfine
5.make menuconfie 修改成目标板;(这时可以保存顶层目录的.config文件为xx_deconfig)
6.make uImage -j4
李良铁
II、驱动的移植和调试:
一.lcd 驱动 添加;
1.在board-xx.c文件添加lcd_device和修改对应的lcd-enable pin;
2.月坛体育馆在drivers/video/目录下添加lcd panel support.c文件,并在对应目录的Kconfig和Makefile添加lcd选项;
二、触摸屏驱动调试
在board-xx.c文件里定义:
1.触摸屏芯片挂在McSPI总线上:
对ads7846_platform_data配置;触摸屏IC参数;
对omap2_mcspi_device_config配置; McSPI主从模式选择/*single_channel: 0: slave, 1: master */
对spi_board_info配置;挂在第几条McSPI总线、总线速率、中断号
struct spi_board_info omap3stalker_spi_board_info[] = {
[0] = {
.modalias = "ads7846",
.bus_num = 1,
.chip_select = 0,
.max_speed_hz = 1500000,
.controller_data = &ads7846_mcspi_config,
.irq = OMAP_GPIO_IRQ(OMAP3_EVM_TS_GPIO),
.platform_data = &ads7846_config,
},
};
注:debounce_tol的值会影响屏的响应速度四种形态和教育惩处相结合
board_xx_init()
spi_register_board_info(omap3stalker_spi_board_info,
ARRAY_SIZE(omap3stalker_spi_board_info));
ads7846_dev_init(); 申请中断引脚GPIO并初始化
2.中断引脚配置:
中断引脚定义:#define OMAP3_EVM_TS_GPIO 20
中断引脚PINMUX设置:
#ifdef CONFIG_TOUCHSCREEN_ADS7846
OMAP3_MUX(ETK_D6, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP |
OMAP_PIN_OFF_INPUT_PULLUP | OMAP_PIN_OFF_OUTPUT_LOW |
OMAP_PIN_OFF_WAKEUPENABLE),
#endif
三、FRAM驱动的添加
1.创建一个i2c设备;
/ * struct i2c_board_info - template for device creation
* @type: chip type, to initialize i2c_client.name
* @flags: to initialize i2c_client.flags
* @addr: stored in i2c_client.addr
* @platform_data: stored in i2c_client.dev.platform_data
* @archdata: copied into i2c_client.dev.archdata
* @irq: stored in i2c_client.irq
* I2C_BOARD_INFO - macro used to list an i2c device and its address
* @dev_type: identifies the device type
* @dev_addr: the device's address on the bus.
* at24_platform_data
* - How much memory is available (usually specified in bit)?
* - What write page size does it support?
* - Special flags (16 bit addresses, read_only, )?
*/
static struct fram_info = {
.byte_len = (64*1024) / 8,
.page_size = 256,
.flags = AT24_FLAG_IRUGO,
};
static struct i2c_board_info __initdata omap3stalker_i2c_boardinfo3[] = {
{
I2C_BOARD_INFO("24c64", 0x50),
.flags = I2C_CLIENT_WAKE,
.platform_data = &fram_info,
},
};
2.将创建的i2c设备注册到所在的i2c总线上:
omap_register_i2c_bus(3, 400, omap3stalker_i2c_boardinfo3,
ARRAY_SIZE(omap3stalker_i2c_boardinfo3));
3.调试的错误信息:0x5d的地址已经被其他设备注册了。
[ 14.025848] i2c i2c-3: Failed to register i2c client dummy at 0x5d (-16)
[ 14.032745] at24 3-0050: address 0x5d unavailable
[ 14.040008] at24: probe of 3-0050 failed with error -98
初始化成功:
[ 22.552978] at24 3-0050: 32768 byte 24c256 EEPROM (writable)
● linux串口应用编程
可使用开发板的串口1(ttyS0),调试时可通过网络终端运行串口程序(网络终端SSH),超时功能可使用select函数实现。
4、课程设计考核办法
平时表现 20%;最终演示及答问40%; 设计报告 40%;实训报告中写出实训内容的主要关键点与具体步骤,附上有关的数据结构与函数及心得体会。
附嵌入式linux系统开发实训时间安排(地点:903)
2010/2011 第一学期嵌入式linux系统开发实训时间安排 第16-17周
时间 | 周一 | 周二 | 周三 | 周四 | 周五 | 周六 |
上午 | | | | | | 撰写实训 报告 |
下午 | | 嵌入式091 | 嵌入式091 | | 嵌入式091 | 撰写实训报告 |
晚上 | 嵌入式091 | 嵌入式091 | 嵌入式091 | 嵌入式091 | | |
| | | | | | |