您的位置 首页 > 资讯

mini2440怎么添加一个i2c设备

[本站 mini2440怎么添加一个i2c设备mini2440怎么添加一个i2c设备自己配置的linux内核,移植到mini2440出错学习嵌入式选择mini2440还是micro2440mini2440烧写程序成功但是板子跑起来没反应请教mini2440开发板上如何成功移植sqlite数据库min…

mini2440怎么添加一个i2c设备

  • mini2440怎么添加一个i2c设备
  • 自己配置的linux内核,移植到mini2440出错
  • 学习嵌入式选择mini2440还是micro2440
  • mini2440 烧写程序成功 但是板子跑起来没反应
  • 请教mini2440开发板上如何成功移植sqlite数据库
  • mini2440即将上市,mini2440和QQ2440的区别
  • 我想买个mini2440或者mini6410 ,做一个QT界面 请问 哪个更好呢学习难度呢
  • 在mini2440中把uboot放到norflash,内核,根文件系统,应用程序放在nandflash,系统如何启动

不知道你要添加什么i2c设备,思路大致如下:

  1. 通过open函数打开/dev/i2c驱动(也可能是iic)具体忘记了。

  2. 然后通过read write ioctl函数进行操作。

很久没玩mini2440了,具体的iic驱动实现你可以看光盘内核源代码中的drivers/i2c/i2c-core.c文件

具体方法参考移植手册,常见问题如下。
错误一:
NOW, Booting Linux......
Uncompressing Linux...................................................................................... done, booting the kernel.
停止的情况
下面的是tools/mach-types中关于体系的参数定义
s3c2440 ARCH_S3C2440 S3C2440 362
mini2440 MACH_MINI2440 MINI2440 1999
解决方法:linux机器码要与bootloader一致,否则出现这个错误!
2.内核的配置
1.. Enable loadable module support ---》
Module unloading
2. System Type ----》
Support ARM920T processor
S3C2440 Machines ---》
SMDK2440
SMDK2440 with S3C2440 CPU moduleq
其他的比如2410,2443相关的全部去掉
3.Boot options ---》
将 (root=/dev/hda1 ro init=/bin/bash console=ttySAC0) Default kernel command string
改成 (noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0 )
其中 mtdblock2 表示 MTD 分区的第二个分区存文件系统; Linuxrc 为启动的首个脚本。
4关掉nand ecc .因为bootload中已经有ecc校验算法
Device Drivers ---》
《*》 Memory Technology Device (MTD) support ---》
MTD partitioning support
《*》 NAND Device Support ---》
《*》 NAND Flash support for S3C2410/S3C2440 SoC
S3C2410 NAND Hardware ECC // 这个要去掉
3.添加nand flash驱动(可参考arm/plat-s3c24xx/common-smdk.c)
在arm/mach-mini2440.c
错误二:
//注意结构和函数的顺序
中添加static struct mtd_partition mini2440_default_nand_part = {
= {
.name = “supervivi“,
.size = 0x00040000,//dev/mdkbloack0
.offset = 0,
},
= {
.name = “param“,
.offset = 0x00040000,
.size = 0x00020000,
},
= {
.name = “Kernel“,
.offset = 0x00560000,
.size =1024 * 1024 * 1024,
},
= {
.name = “nand“,
.offset = 0x00000000,
.size = 1024 * 1024 * 1024,
},
};
static struct s3c2410_nand_set mini2440_nand_sets = {
= {
.name = “NAND“,
.nr_chips = 1,
.nr_partitions = ARRAY_SIZE(mini2440_default_nand_part),
.partitions =mini2440_default_nand_part,
},
};
static struct s3c2410_platform_nand mini2440_nand_info = {
.tacls = 20,
.twrph0 = 60,
.twrph1 = 20,
.nr_sets = ARRAY_SIZE(mini2440_nand_sets),
.sets = mini2440_nand_sets,
.ignore_unset_ecc = 1,
};
错误三:
Unable to handle kernel NULL pointer dereference at virtual address 00000018
pgd = c0004000
*pgd=00000000
Internal error: Oops: 5
make zIamge下载后报错
解决办法:
static void __init mini2440_machine_init(void)
{
s3c24xx_fb_set_platdata(&mini2440_fb_info);
s3c_i2c0_set_platdata(NULL);
s3c_device_nand.dev.platform_data = &mini2440_nand_info; //这个函数手册上没有,但得加
platform_add_devices(mini2440_devices, ARRAY_SIZE(mini2440_devices));
//smdk_machine_init();
}
static struct platform_device *mini2440_devices __initdata = {
&s3c_device_usb,
&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c0,
&s3c_device_iis,
&s3c_device_nand, // 把 nand flash 设备添加到开发板的设备列表结构
};
更改drivers/mtd/nand/s3c2410.c关闭ecc校验
chip-》ecc.mode = NAND_ECC_SOFT;
改为:chip-》ecc.mode = NAND_ECC_NONE;
错误四:
arch/arm/mach-s3c2440/mach-mini2440.c:84: error: array type has incomplete element type
arch/arm/mach-s3c2440/mach-mini2440.c:85: error: array index in non-array initializer
arch/arm/mach-s3c2440/mach-mini2440.c:85: error: (near initialization for ’mini2440_nand_sets’)
arch/arm/mach-s3c2440/mach-mini2440.c:86: error: field name not in record or union initializer
arch/arm/mach-s3c2440/mach-mini2440.c:86: error: (near initialization for ’mini2440_nand_sets’)
arch/arm/mach-s3c2440/mach-mini2440.c:87: error: field name not in record or union initializer

在macn-mini2440中添加头文件
#include 《plat/common-smdk.h》
#include 《linux/mtd/mtd.h》
#include 《linux/mtd/nand.h》
#include 《linux/mtd/nand_ecc.h》
#include 《linux/mtd/partitions.h》
#include 《plat/nand.h》//这个也不能少的哦
编译后下载:
affs: dev is 32505858 name is “mtdblock2“
yaffs: passed flags ““
yaffs: Attempting MTD mount on 31.2, “mtdblock2“
yaffs: auto selecting yaffs2
yaffs_read_super: isCheckpointed 0
VFS: Mounted root (yaffs filesystem) on device 31:2.
Freeing init memory: 128K
错误五:
Kernel panic - not syncing: Attempted to kill init
解决办法: 这个时候懵了,哪里错呢~ 没办法,只能对照着友善的配置一个个大模块对着来改
当改到Kernel Features的时候错误消失了,原来需要选上
Use the ARM EABI to compile the kernel
Allow old ABI binaries to run with thie Kernel
为什么呢?~ Google了一下,原来友善的根文件系统在编译的时候也启用了EABI特性,内核和文件系统需要对上
文件系统用了EABI 内核也要用EABI 内核不用EABI 也只能读取不用EABI的文件系统

个人感觉mini2440会好一些。
mini2440资料比较多,但是目前ARM9的板子感觉资料都很乱。如果你有一点的基础我觉得你可以学习A8,TINY210这样的板子。

可能是你的工具链有问题,你先将uboot烧写到norflash中,然后在用uboot将裸板程序(最好是韦东山老师原带的bin文件)烧写到nandflash中,设置板子nandflash启动

sqlite3在mini2440上的移植
一、开发环境:
Mini2440,linux_2.6.32.2内核,
ubuntu10.04,arm-linux-gcc-4.3.2
在上下载sqlite源代码sqlite-3.6.22.tar.gz
二、移植步骤
1.解压数据库源文件并进入解压后的目录,如下:
tar -zxvf sqlite-3.6.22.tar.gz
cd sqlite-3.6.22
2.创建一个目录build并进入该目录,用于在这个目录中进行交叉编译,如下:
mkdir build
cd build
3.在build目录中运行sqlite-3.6.22中的configure脚本生成Makefile文件,如下:
https://www.bjygyt.com/configure --host=arm-linux --prefix=/rootlite-3.6.22ild/target
选项host指定的是用arm交叉编译器进行编译
选项prefix后面的路径是到时候编译安装后目标存放的目录,你可以任意设置
4.执行make和make install命令,如下:
make
make install
出现问题:
arm-linux-ranlib /usr/locallite3bbsqlite3.a
.btool: line 6619: arm-linux-ranlib: command not found
错误,解决方法如下:
sudo su //先切换到根用户
export PATH=$PATH:/usr/local/arm/4.3.2/bin //设置根用户的环境变量
编译和安装完后,在/rootlite-3.6.22ild/target目录中会生成三个目标文件夹,分别是:bin、include、 lib,然后分别将bin下的文件下载到开发板的/usr/bin目录中,lib下的所有文件下载到开发板的/usrb目录中即可。include目录下是sqlite的C语言API的头文件,编程时会用到。
5.在开发板上测试移植的sqlite数据库。登录开发板的Linux,执行:
sqlite3 demo.db
sqlite3是一个sqlite的命令行访问程序,demo.db是新建的数据库的名字,必须以db作后缀。然后会看到下面的画面,说明移植成功。
三、测试
1、新建数据库
#sqlite3 test.db
SQLite version 3.6.18
Enter “.help“ for instructions
Enter SQL statements terminated with a “;“
sqlite》 create table film (number,name);
sqlite》 insert into film values (1,’aaa’);
sqlite》 insert into film values (2,’bbb’);
sqlite》 select * from film;
1|aaa
2|bbb
sqlite》.quit
#
蓝色部分为输入。
2、测试程序
这里以SQLite官方站点文档中的测试程序为例对移植到ARM-Linux上的SQLite3进行测试。该程序清单如下:
//test_sqlite.c
#include 《stdlib.h》
#include 《stdio.h》
#include 《sqlite3.h》
static int callback(void *NotUsed, int argc, char **argv, char **azColName)
{
int i;
for(i=0; i《argc;i++)
{
printf(“%s = %s/n“, azColName);
}
printf(“/n“);
return 0;
}
int main(int argc, char **argv)
{
sqlite3 *db;
char *zErrMsg = 0;
int rc;
if( argc!=3 )
{
fprintf(stderr, “Usage: %s DATABASE SQL-STATEMENT/n“, argv);
}
rc = sqlite3_open(argv, &db);
if( rc )
{
fprintf(stderr, “Can’t open database: %s/n“, sqlite3_errmsg(db));
sqlite3_close(db);
}
rc = sqlite3_exec(db, argv, callback, 0, &zErrMsg);
if( rc!=SQLITE_OK )
{
fprintf(stderr, “SQL error: %s/n“, zErrMsg);
}
sqlite3_close(db);
return 0;
}
使用如下命令编译测试程序:
交叉编译时采用arm-linux-gcc -I /……(安装路径)/include -L/……(安装路径)b -o target src -lsqlite3
arm-linux-gcc -o test_sqlite test_sqlite.c -lsqlite3 -L /opt/FriendlyARM/mini2440lite-3.7.3ildb/ -I /opt/FriendlyARM/mini2440lite-3.7.3ild/include/
3、在上面新建的数据库目录下测试:
#https://www.bjygyt.com/gsnews/test_sqlite test.db “select * from film“
number = 1
name = aaa
number = 2
name = bbb
#
1)
创建数据库文件:
》SQLite3 test.db 回车
就生成了一个test.db在d盘。
这样同时也SQLite3挂上了这个test.db
2)
用.help可以看看有什么命令
》.help 回车即可
3)可以在这里直接输入SQL语句创建表格用;结束,然后回车就可以看到了
4)看看有创建了多少表
》.tables
5)看表结构
》.schema 表名
6)看看目前挂的数据库
》.database
7)如果要把查询输出到文件
》.output 文件名
》 查询语句;
查询结果就输出到了文件c:/query.txt
把查询结果用屏幕输出
》.output stdout
8)把表结构输出,同时索引也会输出
.dump 表名
9)退出
》.exit 或者.quit

基本一样,稍微不同:
1. 网卡改为了100M
2. 按键改为6个,并增加引出的接口。资源分配和QQ2440不同
3. CMOS接口增加了I2C和一个中断(EINT20)
4. 电源改为5V供电
5. 少了一个音频输入口,但可以通过白色插座引出
其他资源配置95%相同,最多是位置不同。

我认为mini2440好
1,价格,mini2440一般在500左右,mini6410在850元以上。
2,做一个QT界面mini2440完全可以,而且mini2440开发板的资料网上也比较多,学习起来更容易。难度一样,或者比mini6410更容易些。
3,如果要买的话,一定要买送的资料多,且网上没有的。到我空间的留言板上看看吧。

非常简单,mini2440从Nor启动后,CPU运行在0x00000000地址,这片地址实际对应NorFlash,因为NorFlash是一个Ramlike器件,所以读取数据方法更内存一样,在Uboot的启动文件start.s中,有一个一段代码实现NorFlash复制到SRAM的功能,复制代码完成后,通过指令,使用CPU跳到内存执行。这时候,Uboot通过另外的代码,实际是Nand subsystem部分,把kernel从Nand读到内存上,再通过指令,然后CPU跳到Kernel入口地址执行。
一旦Kernel跑起来,Kernel通过Uboot传递CMDLINE就可发现到根文件系统的分区了。所以根文件再通过一些列复杂的机制,最终把文件系统挂入系统中。
要完全了解这个过程,必须要完完整整地把Uboot和Kernel移植一遍才知道。
最后补充一下,mini2440上使用Uboot、supervivi,vivi之类的Bootloader实际功能都差不多。


相关tag:mini2440
本站部分资源来源于网络,如果侵犯了您的权益,请联系我们删除1354090129@qq.com

标签:in   and

本文来自网络,不代表94汽车车网立场,所有(图文、音视频)均由用户自行上传分享,仅供网友学习交流,版权归原作者。若您的权利被侵害,请联系 56325386@qq.com 删除。转载请注明出处:https://94che.com/qc/190838.html

发表回复

您的电子邮箱地址不会被公开。

返回顶部