赞
踩
u-boot-2012.04.01 (toolchain: 4.3.2)
linux-4.19 (toolchain: gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi)
tslib-1.4.tar.gz (toolchain: 4.3.2)
fs使用韦东山视频教程:fs_mini_mdev_new.jffs2
tftp工具
链接:https://pan.baidu.com/s/1RmFznkuIjoNnBoVhqdNWUA
提取码:uhyl
复制这段内容后打开百度网盘手机App,操作更方便哦
sudo apt-get autoremove open-vm-tools
sudo apt-get install open-vm-tools
sudo apt-get install open-vm-tools-desktop
1.安装 sudo apt-get install nfs-kernel-server
2.创建samba账户,win才可以访问
3.linux(ubuntu)下的64位编译器编译32位程序
https://blog.csdn.net/yingjie79613/article/details/79068005
https://www.cnblogs.com/hicjiajia/archive/2012/07/09/2583632.html
sudo apt-get install nfs-common
sudo apt-get install nfs-kernel-server
vim /etc/exports
/work/share/ *(rw,sync,no_subtree_check)
/etc/init.d/nfs-kernel-server restart
mount -t nfs -o nolock 192.168.1.21:/work/share /mnt
umount /mnt
apt-get install bison
apt-get install flex
sudo apt-get install libncurses5-dev
命令 | 说明 |
---|---|
export PATH="$PATH:/work/compiler/4.3.2/bin" | 指定工具链 |
echo $PATH | 查看工具链 |
make O=./out distclean | 清除编译 |
make O=./out tq2440_config | 配置工程 |
make O=./out all | 编译 |
cp ./out/u-boot.bin /work/share/ | 复制到tftp共享文件夹 |
arm-linux-objdump -D out/u-boot > out/u-boot.dis | 反汇编 |
tftp 0x32000000 u-boot.bin;go 0x32000000 | tftp下载到内存,运行 |
tq2440 arm 920t - samsung s3c24x0
#LDFLAGS_u-boot += -pie // 取消相对位置编译
.text :
{
__image_copy_start = .;
CPUDIR/start.o (.text)
board/samsung/tq2440/libtq2440.o (.text)
*(.text)
}
#if 1//!defined(CONFIG_SKIP_LOWLEVEL_INIT)
adr r0, _start
cmp r0, #0
bleq lowlevel_init//cpu_init_crit
#endif
adr r0, _start 得到的是_start的当前执行位置,由 pc+offset 决定的 得到有效地址
ldr r0, =_start 得到的是绝对的地址,链接时决定;
/*Relocate*/
adr r0, _start
ldr r1, _TEXT_BASE
ldr r2, _armboot_start
ldr r3, _bss_start
sub r2, r3, r2
bl relocate /* r0: source, r1: dest, r2: size */
DECLARE_GLOBAL_BOOTFLAG; void relocate(int *ptr_src, int *ptr_dst, int size) { int bootflag = 0; //if (((ulong)ptr_src >= CONFIG_SYS_SDRAM_BASE) && ((ulong)ptr_src <= CONFIG_SYS_TEXT_BASE)) if (0 != ptr_src) {// ram bootflag = 0; } else { bootflag = isBootFromNorFlash() ? 1 : 2; } if (bootflag <= 1) {//RAM or Nor int i = 0; size += 3; size >>= 2; for (i = 0; i < size; i++) { ptr_dst[i] = ptr_src[i]; } } else {// Nand nand_init_ll(); nand_read_ll(ptr_src, ptr_dst, size); } BootFlag = bootflag; }
TQ2440# print baudrate=115200 bootargs=console=ttySAC0,115200 root=/dev/mtdblock5 rootfstype=jffs2 ip=192.168.1.10:192.168.1.21:192.168.1.1:255.255.255.0::eth0:off bootcmd=nand read 30000000 kernel;bootm 30000000 bootdelay=2 ethact=dm9000 ethaddr=00:0c:29:4d:e4:f4 gatewayip=192.168.1.1 ipaddr=192.168.1.10 mtddevname=u-boot mtddevnum=0 mtdids=nand0=tq2440-0 mtdparts=mtdparts=tq2440-0:256k(u-boot),128k(params),128k(dts),256k(logo),4m(kernel),-(rootfs) netmask=255.255.255.0 partition=nand0,0 serverip=192.168.1.20 stderr=serial stdin=serial stdout=serial Environment size: 580/131068 bytes
// 烧写fs
tftp 30000000 fs_mini_mdev.jffs2
nand erase.part rootfs
nand write.jffs2 30000000 0x00260000 5b89a8
// 设置环境变量
set bootargs console=tty0 console=ttySAC0,115200 root=/dev/mtdblock5 rootfstype=jffs2
https://blog.csdn.net/oqqHuTu12345678/article/details/71172672
命令 | 说明 |
---|---|
make O=./out/ distclean | 清除编译 |
make O=./out/ tq2440_defconfig | 配置工程 |
make O=./out/ uImage V=1 | 编译 |
cp ./out/arch/arm/boot/uImage /work/share/ | 复制到tftp共享文件夹 |
tftp 30000000 uImage;bootm 30000000 | 下载到内存;运行内核 |
配置工具链
ARCH ?= arm
CROSS_COMPILE ?= /work/compiler/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-
配置分区
static struct mtd_partition smdk_default_nand_part[] = { [0] = { .name = "u-boot", .offset = 0, .size = SZ_256K, }, [1] = { .name = "params", .offset = SZ_256K, .size = SZ_128K, }, [2] = { .name = "dts", .offset = SZ_256K+SZ_128K, .size = SZ_128K, }, [3] = { .name = "logo", .offset = SZ_256K+SZ_128K+SZ_128K, .size = SZ_256K, }, [4] = { .name = "kernel", .offset = SZ_256K+SZ_128K+SZ_128K+SZ_256K, .size = SZ_4M, }, [5] = { .name = "rootfs", .offset = SZ_256K+SZ_128K+SZ_128K+SZ_256K+SZ_4M, .size = MTDPART_SIZ_FULL, }, };
配置系统时钟
static void __init smdk2440_init_time(void)
{
s3c2440_init_clocks(/*16934400*/12000000);
samsung_timer_init();
}
lcd参数
static struct s3c2410fb_display smdk2440_lcd_cfg __initdata = { .type = S3C2410_LCDCON1_TFT, .width = 320, .height = 240, .xres = 320, .yres = 240, .bpp = 16, .pixclock = 80000, /* HCLK 100 MHz, divisor 3 */ #if 1 .left_margin = 28, /* for HFPD*/ .right_margin = 24, /* for HBPD*/ .hsync_len = 42, /* for HSPW*/ .upper_margin = 6, /* for VBPD*/ .lower_margin = 2, /* for VFPD*/ .vsync_len = 12, /* for VSPW*/ #else .left_margin = 32, /* for HFPD*/ .right_margin = 22, /* for HBPD*/ .hsync_len = 45, /* for HSPW*/ .upper_margin = 13, /* for VBPD*/ .lower_margin = 5, /* for VFPD*/ .vsync_len = 6, /* for VSPW*/ #endif .lcdcon5 = S3C2410_LCDCON5_FRM565 \ | S3C2410_LCDCON5_INVVLINE \ | S3C2410_LCDCON5_INVVFRAME \ | S3C2410_LCDCON5_PWREN \ | S3C2410_LCDCON5_HWSWP, };
bug
static int s3c24xx_dma_probe(struct platform_device *pdev)
{
...
s3cdma->slave.filter.map = pdata->slave_map;
s3cdma->slave.filter.mapcnt = pdata->slavecnt;
s3cdma->slave.filter.fn = s3c24xx_dma_filter;
s3cdma->slave.directions = BIT(DMA_DEV_TO_MEM) | BIT(DMA_MEM_TO_DEV);
...
}
bug
static int s3c_rtc_probe(struct platform_device *pdev)
{
...
info->dev = &pdev->dev;
//info->data = s3c_rtc_get_data(pdev);
info->data = platform_get_device_id(pdev)->driver_data;
if (!info->data) {
dev_err(&pdev->dev, "failed getting s3c_rtc_data\n");
return -EINVAL;
}
}
static int __init rtc_hctosys(void) { ... #if 1 { int retries = 0; for (retries=0; retries<3; retries++) { err = rtc_read_time(rtc, &tm); if (0 == err) { /*dev_info(rtc->dev.parent, "rtc_read_time " "%d-%02d-%02d %02d:%02d:%02d UTC (%lld)\n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec, (long long) tv64.tv_sec);*/ dev_info(rtc->dev.parent, "rtc_read_time success!\n"); break; } else { dev_err(rtc->dev.parent, "rtc_read_time failed!\n"); tm.tm_year = 120; tm.tm_mon = 0; tm.tm_mday = 1; tm.tm_wday = 3; tm.tm_hour = 0; tm.tm_min = 0; tm.tm_sec = 0; if (rtc_set_time(rtc, &tm)) { dev_err(rtc->dev.parent, "rtc_set_time failed!\n"); goto err_read; } } } if (retries >= 3) { dev_err(rtc->dev.parent, "hctosys: unable to read the hardware clock\n"); goto err_read; } } #else err = rtc_read_time(rtc, &tm); if (err) { dev_err(rtc->dev.parent, "hctosys: unable to read the hardware clock\n"); goto err_read; } #endif }
CONFIG_BLK_DEV_RAM_COUNT=8
CONFIG_LEGACY_PTY_COUNT=8
#define MAX_NR_CONSOLES 7
#!/bin/sh
#ifconfig eth0 192.168.1.17
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
echo 1 > /sys/class/leds/backlight/brightness
echo 0 > /sys/devices/virtual/graphics/fbcon/cursor_blink
mount -t nfs -o nolock 192.168.1.21:/work/share /mnt
环境:
sudo apt-get install autoconf
sudo apt-get install automake
sudo apt-get install libtool
编译:
tar xzf tslib-1.4.tar.gz
cd tslib
./autogen.sh
mkdir tmp
echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
./configure --host=arm-linux --cache-file=arm-linux.cache --prefix=$(pwd)/tmp
make
make install
安装:
cd tmp
cp * -rf /nfsroot
cat /etc/profile
export TSLIB_TSDEVICE=/dev/event0
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
执行:
ts_calibrate
ts_test
static int ts_input_read(struct tslib_module_info *inf, struct ts_sample *samp, int nr) { ... #if 0 if (i->sane_fd == 0) i->sane_fd = check_fd(i); if (i->sane_fd == -1) return 0; #else i->using_syn = 1; #endif if (i->using_syn) { switch (ev.type) { case EV_KEY: switch (ev.code) { case BTN_TOUCH: if (ev.value == 0) { } else { i->current_p = ev.value; } break; } break; } } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。