通过SD卡启动,擦除nand闪存
#nand scrub
#nand erase
设置ipaddr和serverip的值(PC机的IP),使它们在同一网段
#set ipaddr 192.168.0.xx
#set serverip 192.168.0.xx(PC的IP)
#save
tftp烧写
给nand烧写uboot
#tftp c0000000 u-boot-nand.bin
#nand write c0000000 0 40000
给nand烧写好uboot后,此时我们可以把核心板装到DIN2416的板子上了,上电启动
uboot启动后
print查看环境变量
#print
设置ipaddr和serverip的值(PC机的IP),使它们在同一网段
#set ipaddr 192.168.0.xx
#set serverip 192.168.0.xx(PC的IP)
#save
内核变大,改变内核的分区
改变uboot的变量
#setenv bootcmd 'nand read.jffs2 C0008000 40000 400000;bootm C0008000'
#save
tftp烧写内核
#tftp c0000000 zImage_128MB_W43
#nand erase 40000 400000
#nand write.jffs2 c0000000 40000 400000
tftp烧写根文件系统
#tftp c0000000 root_EM2416.yaffs2
#nand scrub 400000 3800000
#nand write.yaffs c0000000 400000 3c65040(根文件系统的大小)
以太网驱动调试
2416公版与DIN2416的以太网的外部中断引脚不一样,DIN2416的以太网的中断引脚为EINT10
路径:linux-3.4.4\arch\arm\mach-s3c24xx\mach-smdk2416.c
修改如下:
static struct resource dm9000_resources[] = {
[0] = {
.start = 0x20000300,
.end = 0x20000307,
.flags = IORESOURCE_MEM,
},
[1] = {
.start = 0x20000308,
.end = 0x2000030f,
.flags = IORESOURCE_MEM,
},
[2] = {
//modify by Con sir
//.start = IRQ_EINT(7),
//.end = IRQ_EINT(7),
.start = IRQ_EINT(10),
.end = IRQ_EINT(10),
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,
},
};
GPIO的控制驱动:
-> Device Drivers
-*- GPIO Support --->
[*] /sys/class/gpio/... (sysfs interface)
485的测试;使用ttyASC1
测试RS485(两板AA-BB对接或者使用USB-485测试)
控制RS485的发送或接收引脚是GPB10->gpio42
在根目录下新建work文件夹,通过rz下载com文件到work目录
# echo "42" > /sys/class/gpio/export
# echo "out" > /sys/class/gpio/gpio42/direction
# echo "0" > /sys/class/gpio/gpio42/value(置低发送)
#./work/com /dev/ttySAC1 9600 8 0 1
# echo "1" > /sys/class/gpio/gpio42/value(置高接收)
#./work/com /dev/ttySAC1 9600 8 0 1
7寸电阻屏的参数支持
路径:linux-3.4.4\arch\arm\mach-s3c24xx\mach-smdk2416.c
static struct s3c_fb_pd_win smdk2416_fb_win[] = {
[0] = {
/* think this is the same as the smdk6410 */
.pixclock = 37037,
.left_margin = 40,
.right_margin = 60,
.upper_margin = 10,
.lower_margin = 10,
.hsync_len = 20,
.vsync_len = 10,
.xres = 800,
.yres = 480,
},
.default_bpp = 16,
.max_bpp = 32,
},
};
继电器的控制:
控制J6两个引脚的继电器的是EINT6/GPF6(gpio166)
#echo "166" > /sys/class/gpio/export
#echo "out" > /sys/class/gpio/gpio166/direction
#echo "1" > /sys/class/gpio/gpio166/value(置高闭合)
#echo "0" > /sys/class/gpio/gpio166/value(置低断开)
控制J5的3个引脚的继电器的是EINT11/GPG3(gpio195)
#echo "195" > /sys/class/gpio/export
#echo "out" > /sys/class/gpio/gpio195/direction
#echo "1" > /sys/class/gpio/gpio195/value(J5的1和2引脚闭合)
#echo "0" > /sys/class/gpio/gpio195/value(J5的2和3引脚闭合)
GPIO(EINT12-EINT14)控制:
把我们自己的驱动加载进内核
Device Drivers --->
Character devices --->
[*] 2416_eint12_eint14
#mknod /dev/2416_EINT12_EINT14 c 232 0
#./Test_EINT12_EINT14
用镊子短接INT12和GND,EINT12被拉低,打印EINT12 is low level信息
用镊子短接INT13和GND,EINT13被拉低,打印EINT13 is low level信息
用镊子短接INT14和GND,EINT14被拉低,打印EINT14 is low level信息
RTC驱动调试:
(1) arch\arm\mach-s3c24xx\mach-smdk2416.c 中添加:
设备名称:(smdk2416_devices中添加)
&s3c_device_rtc,
(2) 配置内核(内核默认已经配置上,所以用之前的移植I2C的配置文件):
Device Drivers --->
[*] Real Time Clock --->
[*] Set system time from RTC on startup and resume
(rtc0) RTC used to set the system time
[*] /sys/class/rtc/rtcN (sysfs)
[*] /proc/driver/rtc (procfs for rtc0)
[*] /dev/rtcN (character devices)
<*> Samsung S3C series SoC RTC
蜂鸣器驱动调试:
路径:linux-3.4.4\input\misc\pwm-beeper.c
使系统加载蜂鸣器驱动听到滴的一声响(有源蜂鸣器)
static int __devinit pwm_beeper_probe(struct platform_device *pdev)
{
unsigned long pwm_id = (unsigned long)pdev->dev.platform_data;
struct pwm_beeper *beeper;
int error;
//add by Con sir
s3c2410_gpio_cfgpin(S3C2410_GPB(0), S3C2410_GPIO_OUTPUT);
s3c2410_gpio_setpin(S3C2410_GPB(0), 1);
mdelay(1000);
s3c2410_gpio_setpin(S3C2410_GPB(0), 0);
....
}
配置和编译内核
#cp DIN2416 .config(这个是以前已经配置好的config文件)
#make -j8
烧写好文件系统出现:can't open /dev/s3c2410_serial0: No such file or director
解决方法:把文件系统中的/etc/inittab文件的的那行内容
s3c2410_serial0::askfirst:-/bin/sh
改为
console::askfirst:-/bin/sh
再次烧根文件系统触控没反应的解决方法:
#vi /bin/qtopia
export set TSLIB_TSDEVICE=/dev/event1
更改为
export set TSLIB_TSDEVICE=/dev/event0