2008-04-02 09:39:47     Memory allocation problem in uClinux-2007R1-RC3

Document created by Aaronwu Employee on Aug 6, 2013
Version 1Show Document
  • View in full screen mode

2008-04-02 09:39:47     Memory allocation problem in uClinux-2007R1-RC3

svs k (INDIA)

Message: 53541   


Hi all,


kindly help.


  I m working in a custom bf533 board in uClinux-2007R1 distribution. I have written a custom driver for LCD according to our specifications.I have an User application that has two buffers Buffer 1 of size 153600 and Buffer 2 of size 230400 bytes respectively. One of the buffers (that is of size 230400) is needed to be copied to a Kernel buffer of LCD driver at run time. I m using write() for this.  I observed following things. Before that, My custom board has been enabled for 64M


case 1:


Buffer 1 address = 0x3080c88  (153600 bytes)

Buffer 2 Address = 0x30A6568(230400 bytes)


In this case,  write() (for Buffer 2) call from the user application is not at all entering into kernel write() to which i have mapped in my custom driver. write() in user application returns -1.


case 2:


Second time, a small change in the code (even asm("nop;")) makes buffer to be allocated as follows.


Buffer 1 address = 0x880c88 (153600 bytes)

Buffer 2 Address  = 0x8a6568 (230400 bytes)


In this case it is working fine.  write() call is entering into kernel write() function. write() returns the number of bytes written to the kernel.




why the memory allocation affects the kernel call.? Kindly help




I have attached "cat /proc/cplbinfo" result with this message. uImage booting is as follows




Bytes transferred = 2779641 (2a69f9 hex)

## Booting image at 01200000 ...

   Image Name:   uClinux Kernel and ext2

   Created:      2008-04-02  11:31:10 UTC

   Image Type:   Blackfin Linux Kernel Image (gzip compressed)

   Data Size:    2779577 Bytes =  2.7 MB

   Load Address: 00300000

   Entry Point:  00300000

   Verifying Checksum ... OK

   Uncompressing Kernel Image ... OK

Starting Kernel at = 300000

Linux version (xxx@Hteam) (gcc version 4.1.1 (ADI

07R1)) #52 Wed Apr 2 17:00:49 IST 2008

Blackfin support (C) 2004-2006 Analog Devices, Inc.

Compiled for ADSP-BF533 Rev. 0.5

Blackfin uClinux support by http://blackfin.uclinux.org/

Processor Speed: 594 MHz core clock and 118 Mhz System Clock

Board Memory: 64MB

Kernel Managed Memory: 64MB

Memory map:

  text      = 0x00300000-0x0040f044

  init      = 0x00410000-0x0041e8a8

  data      = 0x004247bc-0x0045b288

  stack     = 0x00426000-0x00428000

  bss       = 0x0045b290-0x006a905c

  available = 0x006a905c-0x03300000

  rootfs    = 0x03300000-0x03f00000

  DMA Zone  = 0x03f00000-0x04000000

Instruction Cache Enabled

Data Cache Enabled (write-back)

Hardware Trace Enabled

Built 1 zonelists.  Total pages: 12954

Kernel command line: root=/dev/mtdblock0 rw,console=ttyBF0,57600

Configuring Blackfin Priority Driven Interrupts

PID hash table entries: 256 (order: 8, 1024 bytes)

Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)

Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)

Physical pages: 3300

Memory available: 44800k/61294k RAM, (58k init code, 1084k kernel code, 2359k da

ta, 1024k dma)

Blackfin Scratchpad data SRAM: 4 KB

Blackfin DATA_A SRAM: 16 KB

Blackfin DATA_B SRAM: 16 KB

Blackfin Instruction SRAM: 64 KB

Security Framework v1.0.0 initialized

Capability LSM initialized

Mount-cache hash table entries: 512

NET: Registered protocol family 16

Blackfin GPIO Controller

Blackfin DMA Controller

ezkit_init(): registering device resources

NET: Registered protocol family 2

IP route cache hash table entries: 512 (order: -1, 2048 bytes)

TCP established hash table entries: 2048 (order: 1, 8192 bytes)

TCP bind hash table entries: 1024 (order: 0, 4096 bytes)

TCP: Hash tables configured (established 2048 bind 1024)

TCP reno registered

io scheduler noop registered

io scheduler anticipatory registered (default)

io scheduler cfq registered

LCD:Driver enabled


Single Core  Loader Module enabled

Dynamic Power Management Controller Driver v0.1: major=10, minor = 254

Serial: Blackfin serial driver

bfin-uart.1: ttyBF0 at MMIO 0xffc00400 (irq = 21) is a BFIN-UART

RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize

Network interface: "eth0"ret value from smsc911x_drv_probe Func is 0

uclinux[mtd]: RAM probe address=0x3300000 size=0xc00000

Creating 1 MTD partitions on "RAM":

0x00000000-0x00c00000 : "ROMfs"

uclinux[mtd]: set ROMfs:EXT2  to be root filesystem

rtc-bfin rtc-bfin: rtc intf: sysfs

rtc-bfin rtc-bfin: rtc intf: proc

rtc-bfin rtc-bfin: rtc intf: dev (254:0)

rtc-bfin rtc-bfin: rtc core: registered rtc-bfin as rtc0

TCP cubic registered

NET: Registered protocol family 1

NET: Registered protocol family 17

rtc-bfin rtc-bfin: setting the system clock to 1997-09-02 18:42:47 (873225767)

VFS: Mounted root (ext2 filesystem) readonly.

Freeing unused kernel memory: 56k freed (0x410000 - 0x41d000)

dma_alloc_init: dma_page @ 0x00419000 - 256 pages at 0x03f00000


Welcome to:

       ____ _  _

      /  __| ||_|             _  _

_   _| |  | | _ ____  _   _ \ \/ /

| | | | |  | || |  _ \| | | | \  /

| |_| | |__| || | | | | |_| | /  \

|  ___\____|_||_|_| |_|\____|/_/\_\



For further information see:






BusyBox v1.4.1 (2008-04-02 15:27:36 IST) Built-in shell (msh)

Enter 'help' for a list of built-in commands.





















2008-04-02 11:09:26     Re: Memory allocation problem in uClinux-2007R1-RC3

Mike Frysinger (UNITED STATES)

Message: 53553    you would need to trace the kernel and find out where the -1 is coming from


also, it sounds like a lot of wasted overhead of copying buffers.  the lcd driver should be managing the buffers, not user space.  if you need a scratch buffer to do updates in, then you should be using double buffering, not single.