標籤:移植
1、
自動掛載U盤和SD卡問題的解決:
http://blog.csdn.net/xdw1985829/article/details/6684968
用的mdev的方法。
在 Linux中我們經常用到U盤、SD卡的掛載問題,每次都手動掛載或卸載非常麻煩,我們可以採取以下方法實現自動掛載或卸載U盤、SD卡
@1: 首先在/etc/init.d/rsC中加入以下語句
echo /sbin/mdev >/proc/sys/kernel/hotplug
@2:在/etc/下簡曆mdev.conf的檔案,包含以下內容
sd[a-z][0-9] 0:0 666 @(/etc/hotplug/insert.sh $MDEV$SUBSYSTEM)
sd[a-z] 0:0 666 $(/etc/hotplug/remove.sh $MDEV$SUBSYSTEM)
ub[a-z][0-9] 0:0 666 @(/etc/hotplug/insert.sh $MDEV$SUBSYSTEM)
ub[a-z] 0:0 666 $(/etc/hotplug/remove.sh $MDEV $SUBSYSTEM)
mmcblk[0-9]p[0-9] 0:0 666 @(/etc/hotplug/insert.sh $MDEV$SUBSYSTEM)
mmcblk[0-9] 0:0 666 $(/etc/hotplug/remove.sh $MDEV$SUBSYSTEM)
@3:在/etc/下建立以下檔案夾hotplug,並在hotplug目錄下建立以下檔案,包含以下內容
insert.sh:
if [ -n "$1" ] ; then
if [ -b /dev/$1 ]; then
if [ ! -d /mnt/usb/sda1 ]; then
mkdir -p /mnt/usb/sda1
fi
if [ ! -d /mnt/usb/$1 ]; then
mkdir -p /mnt/usb/$1
fi
mount /dev/$1 /mnt/usb/$1
if [ $? -ne 0 ]; then
rm -rf /mnt/usb/$1
fi
fi
fi
remove.sh:
MOUNTS=$(mount | grep $1 | cut -d‘ ‘ -f3)
umount $MOUNTS
rm -rf $MOUNTS
SD卡的自動掛載同理:
@4:在/etc/下建立以下檔案夾hotplug,並在hotplug目錄下建立以下檔案,包含以下內容
insertsd.sh:
if [ -n "$1" ] ; then
if [ -b /dev/$1 ]; then
if [ ! -d /mnt/mmc/mmcblk0p1 ]; then
mkdir -p /media
fi
if [ ! -d /mnt/mmc/$1 ]; then
mkdir -p /mnt/mmc/$1
fi
mount /dev/$1 /mnt/mmc/$1
if [ $? -ne 0 ]; then
rm -rf /mnt/mmc/$1
fi
fi
fi
removesd.sh:
MOUNTS=$(mount | grep $1 | cut -d‘ ‘ -f3)
umount $MOUNTS
rm -rf $MOUNTS
2、
date 日月時分年.秒 //設定系統時間
hwclock -f /dev/rtc1 -w //將系統時間寫入到/dev/rtc1中寫到硬體rtc中
hwclock -f /dev/rtc1 -s //將rtc1的時間同步到系統時間中 從硬體rtc中同步到系統中
3、
RTC的hwclock問題的解決:
用的pcf8563驅動
在arch/arm/mach-nuc970/dev.c中
將:
static struct i2c_board_info __initdatanuc970_i2c_clients0[] =
{
#ifdef CONFIG_SND_SOC_NAU8822
{I2C_BOARD_INFO("nau8822",0x1a),},
#endif
};
改為:
static struct i2c_board_info __initdatanuc970_i2c_clients0[] =
{
#ifdef CONFIG_SND_SOC_NAU8822
//{I2C_BOARD_INFO("nau8822",0x1a),},
#endif
{I2C_BOARD_INFO("pcf8563",0x51)}, //添加pcf8563
};
之後將:
#ifdef CONFIG_I2C_BUS_NUC970_P0
i2c_register_board_info(0,nuc970_i2c_clients0, sizeof(nuc970_i2c_clients0)/sizeof(structi2c_board_info));
#endif
改為:
#ifdef CONFIG_I2C_BUS_NUC970_P0
//i2c_register_board_info(1,nuc970_i2c_clients0, sizeof(nuc970_i2c_clients0)/sizeof(struct i2c_board_info));
i2c_register_board_info(0,nuc970_i2c_clients0, sizeof(nuc970_i2c_clients0)/sizeof(structi2c_board_info)); //我們使用的是I2C0
#endif
編譯核心,看核心中的log資訊,來得知pcf8563的rtc,是在/dev/rtc1
所以操作hwclock操作這個rtc時,要指定檔案裝置(用-f),否則直接hwclock可能是對應的/dev/rtc0
date 月日時分年.秒
hwclock -f /dev/rtc1 -w
4、
看門狗無法複位的問題:
硬體電路上沒有32.768KHZ的晶振,然而核心中看門狗用的卻是這個32.768KHZ晶振提供的時鐘源。
解決方案兩種:
第一種:硬體電路上加上這個32.768KHZ的晶振。
第二種:軟體上,在核心驅動中,讀改寫了看門狗的時鐘來源的寄存器,將其設定為了從PCLK/4096來的時鐘源,也就是75MHZ/4096。
在 driver/watchdog/nuc970_wdt.c 中
將:
static int nuc970wdt_start(structwatchdog_device *wdd)
{
unsignedint val = 0;
val|= (WTRE | WTE | WTR);
if(wdd->timeout< 2) {
val|= 0x5 << 8;
}else if (wdd->timeout < 8) {
val|= 0x6 << 8;
}else {
val|= 0x7 << 8;
}
Unlock_RegWriteProtect();
__raw_writel(val,REG_WDT_CR);
Lock_RegWriteProtect();
return0;
}
修改為:
static int nuc970wdt_start(structwatchdog_device *wdd)
{
unsignedint val = 0;
val|= (WTRE | WTE | WTR);
if(wdd->timeout< 2) {
val|= 0x5 << 8;
}else if (wdd->timeout < 8) {
val|= 0x6 << 8;
}else {
val|= 0x7 << 8;
}
// printk(KERN_INFO"/****************************WDT_START val = 0x%x ************\n", val);//0x783 //why
Unlock_RegWriteProtect();
__raw_writel(val,REG_WDT_CR);
__raw_writel((__raw_readl(REG_CLK_DIV8)& (~0x300)) | 0x200, REG_CLK_DIV8); //why PCLK/4096 //設定看門狗的時鐘源
Lock_RegWriteProtect();
return0;
}
將:
static int nuc970wdt_probe(structplatform_device *pdev)函數中的
nuc970_wdd.timeout= 2; // default time out =2 sec (2.03)
nuc970_wdd.min_timeout= 1;
nuc970_wdd.max_timeout= 9; // max time out = 9 sec (8.03)
修改成:
//nuc970_wdd.timeout = 2; // default time out = 2 sec (2.03)
nuc970_wdd.timeout= 8; //why
nuc970_wdd.min_timeout= 1; // min time out = 1 sec (0.53)
//nuc970_wdd.max_timeout= 9; // max time out = 9 sec (8.03)
nuc970_wdd.max_timeout= 14; //why
5、Qt移植
./configure -prefix /usr/local/qt4.8.3-arm-embedded arm -release -shared -fast -no-largefile -qt-sql-sqlite -qt3support-no-xmlpatterns -no-glib -no-phonon -no-mmx -no-3dnow -no-sse -no-sse2 -no-svg-webkit -qt-zlib -qt-libtiff -qt-libpng -qt-libjpeg -make libs -nomake examples-nomake docs -nomake demo -no-nis -no-cups -iconv -no-dbus -openssl -xplatformqws/linux-arm-g++ -little-endian -qt-freetype -depths 16,24,32 -qt-gfx-linuxfb-qt-gfx-transformed -qt-gfx-multiscreen -no-gfx-vnc -no-gfx-qvfb-qt-kbd-linuxinput -no-kbd-qvfb -armfpa -no-mouse-qvfb -qt-mouse-linuxtp-qt-mouse-tslib -DQT_QLOCALE_USES_FCVT -I/usr/local/arm/tslib/include -L/usr/local/arm/tslib/lib-confirm-license
echo yes | ./configure -prefix/usr/local/qt4.8.3-arm -release -no-largefile -opensource -embedded arm -stl-qt-freetype -qt-sql-sqlite -no-qt3support -no-svg -no-xmlpatterns-no-phonon-backend -no-scripttools -no-phonon -no-script -no-audio-backend-no-multimedia -no-openssl -nomake tools -nomake examples -nomake demos -nomakedocs -xplatform qws/linux-arm-g++ -no-webkit -no-qvfb -no-cups -no-neon-qt-gfx-vnc -no-gfx-multiscreen -qt-kbd-tty -qt-gfx-transformed -no-libtiff-no-libmng -qt-libpng -qt-mouse-pc -no-mouse-linuxtp -qt-mouse-tslib
本文出自 “whylinux” 部落格,謝絕轉載!
NUC972移植工作記錄