From patchwork Fri Aug 29 12:30:55 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Kim_B=C3=B8ndergaard?= X-Patchwork-Id: 384220 X-Patchwork-Delegate: kiho@prevas.dk Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from hugin.dotsrc.org (hugin.dotsrc.org [IPv6:2001:878:346::102]) by ozlabs.org (Postfix) with ESMTP id 671F014012F for ; Fri, 29 Aug 2014 22:31:08 +1000 (EST) Received: from hugin.dotsrc.org (localhost [127.0.0.1]) by hugin.dotsrc.org (Postfix) with ESMTP id E49C73FDA6 for ; Fri, 29 Aug 2014 14:31:06 +0200 (CEST) X-Original-To: dev@oe-lite.org Delivered-To: dev@oe-lite.org Received: from mail01.prevas.se (mail01.prevas.se [62.95.78.3]) by hugin.dotsrc.org (Postfix) with ESMTPS id 6B1573FE5A for ; Fri, 29 Aug 2014 14:31:01 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=prevas.dk; i=@prevas.dk; l=5455; q=dns/txt; s=ironport1; t=1409315462; x=1440851462; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=lMls+3/Wzzwl9eq8dgwjXhBqkhXtmS40HfXVjLrybBA=; b=qdb/lbCb85MN3Yo+gw0jHHilSyZUZs+hxo0dbqnYuh3GTfbdZO7OERF+ upP99m8epMMbEU/krVp6vuqoiMS98qVMoS95G19+z87anWfMdm8QYANFD pFZuRwXI46aociopg6Mu/UaWzcAHLPOEIwhRd1TqU3EHsp6a3UVhYqvPc 4=; X-IronPort-AV: E=Sophos;i="5.04,424,1406584800"; d="scan'208";a="5030403" Received: from vmprevas3.prevas.se (HELO smtp.prevas.se) ([172.16.8.103]) by ironport1.prevas.se with ESMTP/TLS/AES128-SHA; 29 Aug 2014 14:31:01 +0200 Received: from localhost (172.16.10.102) by smtp.prevas.se (172.16.8.105) with Microsoft SMTP Server id 14.2.347.0; Fri, 29 Aug 2014 14:31:00 +0200 Received: by localhost (Postfix, from userid 30019) id 7A2C6681673; Fri, 29 Aug 2014 12:30:59 +0000 (UTC) From: =?UTF-8?q?Kim=20B=C3=B8ndergaard?= To: Subject: [PATCH 6/6] ti/mem_util: new developer tool to dbg entire mem incl cpu regs. Date: Fri, 29 Aug 2014 12:30:55 +0000 Message-ID: <84c79cdb83ccdff7014f94b75f124ffb870c1240.1409312414.git.kibo@prevas.dk> X-Mailer: git-send-email 1.8.4 In-Reply-To: References: MIME-Version: 1.0 X-BeenThere: dev@oe-lite.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: OE-lite development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dev-bounces@oe-lite.org Errors-To: dev-bounces@oe-lite.org From: Jacob Kjaergaard --- recipes/ti/files/mem_util.c | 131 ++++++++++++++++++++++++++++++++++++++++++++ recipes/ti/mem-util.oe | 26 +++++++++ 2 files changed, 157 insertions(+) create mode 100755 recipes/ti/files/mem_util.c create mode 100644 recipes/ti/mem-util.oe diff --git a/recipes/ti/files/mem_util.c b/recipes/ti/files/mem_util.c new file mode 100755 index 0000000..33639b6 --- /dev/null +++ b/recipes/ti/files/mem_util.c @@ -0,0 +1,131 @@ +/* + * Module: mem_util.c + * + * Description: This program is used to read/write from/to any location in memory. + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define FATAL do { fprintf(stderr, "Error at line %d, file %s (%d) [%s]\n", \ + __LINE__, __FILE__, errno, strerror(errno)); exit(1); } while(0) + +#define MAP_SIZE 4096UL +#define MAP_MASK (MAP_SIZE - 1) + +int main(int argc, char **argv) { + int fd; + void *map_base, *virt_addr; + unsigned long read_result, writeval; + off_t target; + int access_type = 'w'; + + if(argc < 2) { + fprintf(stderr, "\nUsage:\t%s { address } [ type [ data ] ]\n" + "\taddress : memory address to act upon\n" + "\ttype : access operation type : [b]yte, [h]alfword, [w]ord\n" + "\tdata : data to be written\n\n", + argv[0]); + exit(1); + } + target = strtoul(argv[1], 0, 0); + + if(argc > 2) + access_type = tolower(argv[2][0]); + + + if((fd = open("/dev/mem", O_RDWR | O_SYNC)) == -1) FATAL; + //printf("/dev/mem opened.\n"); + fflush(stdout); + + /* Map one page */ + map_base = mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, target & ~MAP_MASK); + if(map_base == (void *) -1) FATAL; + //printf("Memory mapped at address %p.\n", map_base); + fflush(stdout); + + virt_addr = map_base + (target & MAP_MASK); + switch(access_type) { + case 'b': + read_result = *((unsigned char *) virt_addr); + break; + case 'h': + read_result = *((unsigned short *) virt_addr); + break; + case 'w': + read_result = *((unsigned long *) virt_addr); + break; + default: + fprintf(stderr, "Illegal data type '%c'.\n", access_type); + exit(2); + } + printf("%X\n", read_result); + fflush(stdout); + + if(argc > 3) { + writeval = strtoul(argv[3], 0, 0); + switch(access_type) { + case 'b': + *((unsigned char *) virt_addr) = writeval; + read_result = *((unsigned char *) virt_addr); + break; + case 'h': + *((unsigned short *) virt_addr) = writeval; + read_result = *((unsigned short *) virt_addr); + break; + case 'w': + *((unsigned long *) virt_addr) = writeval; + read_result = *((unsigned long *) virt_addr); + break; + } + printf("Written 0x%X; readback 0x%X\n", writeval, read_result); + fflush(stdout); + } + + if(munmap(map_base, MAP_SIZE) == -1) FATAL; + close(fd); + return 0; +} + diff --git a/recipes/ti/mem-util.oe b/recipes/ti/mem-util.oe new file mode 100644 index 0000000..46709cf --- /dev/null +++ b/recipes/ti/mem-util.oe @@ -0,0 +1,26 @@ +DESCRIPTION = "his program is used to read/write from/to any location in memory." + +SECTION = "Memory util" + +LICENSE = "TI" + +SRC_URI += " file://mem_util.c" + +S= "${SRCDIR}" + +do_compile() { + + ${CC} ${CFLAGS} ${LDFLAGS} mem_util.c -o mem_util + +} + +do_install(){ + + install -d ${D}${bindir} + install -m 0755 mem_util ${D}${bindir} + +} + +RDEPENDS_${PN} += "libc" + +inherit c