Looking for a binary image layout tool [closed] - embedded

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking us to recommend or find a tool, library or favorite off-site resource are off-topic for Stack Overflow as they tend to attract opinionated answers and spam. Instead, describe the problem and what has been done so far to solve it.
Closed 9 years ago.
Improve this question
I am looking for recommendations for a tool that will let me construct a binary image out of a series of smaller images.
I have an embedded system with a flash ROM that I program using a single image. That image consists of a series of smaller objects (data, compiled code, etc) placed at specific offsets. The build system I inherited uses a disturbing amalgam of old 16-bit DOS utilities to hack the image together. I was hoping to find a modern tool that would do the job in a less arcane (and less bug-prone) manner.
The tool needs to be able to run from a config file. That is, I specify that file A.bin needs to be placed at offset 4KB, file B.bin needs to be placed at offset 16KB, etc etc in a configuration file so that the tool does not require repeated manual command-line invocations. This is mainly because we have another system that will be auto-generating these config files.
The tool also needs to be open source (or at a minimum, cross-platform). We have developers using Windows and automated build systems using Linux and the tool would need to work on both.
I have debated hacking together my own utility in C, but before I went through all the trouble developing and debugging I wanted to ask and see if someone knew of a tool that was already out there that I missed.
Edit: Cygwin-related tools are unfortunately not an option for us. One of our critical build tools will crash if it is run on a system with Cygwin installed (I think it uses a specific, older cygwin DLL but that's an entirely different fiasco unto itself).

I usually write my own, but via Jack Ganssle's Embedded Muse newsletter No. 184 I came across http://srecord.sourceforge.net/ which will do just about anything with almost any type of binary image file (despite its name it handles far more formats than just Motorola S-Records, including raw binaries). It may save you some time.

dd would be definitively your best friend.
Use cygwin for windows users.

The Elfweaver utility that is distributed with OKL4 may be appropriate for you. From the manual:
"Elfweaver is a tool that may be used to manipulate ELF files. Elfweaver is written as a Python 2.3 application that only uses cross-platform libraries. Therefore Elfweaver should run on Linux, Mac-OS X and Windows. The main functionality of Elfweaver is that it allows the user to merge multiple ELF files into a single ELF file"
http://wiki.ok-labs.com/downloads/release-3.0/okl4-ref-manual-3.0.pdf
If you think that looks suitable, you can get the tool along with the okl4 source code from the OKL4 website.

Related

Tools for upstream maintainers? For testing before release (Debian, etc.) [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking us to recommend or find a tool, library or favorite off-site resource are off-topic for Stack Overflow as they tend to attract opinionated answers and spam. Instead, describe the problem and what has been done so far to solve it.
Closed 9 years ago.
Improve this question
I develop a library that is used by other software. Typically this library ends up packaged in Debian, Fedora, etc., and its "reverse-dependencies" also end up packaged and using it.
So, I guess this makes me an "upstream maintainer." I simply use autotools to produce a tarball, and packagers then use that to produce .deb files, etc. Now, something that has bothered me for quite some time is the disconnect between maintainers and packagers. I feel like every time I do a release, even if it is simply a bugfix release, I am potentially causing headaches for everyone down the chain.
Possible problems:
I introduced a bug that wasn't caught in testing, even though I tried extensively to test various configurations -- I don't have unlimited testing resources and it is a small library so I am mostly on my own although there are 1 or 2 other interested people who help out, but generally only test on one platform.
I forgot to bump the version number, causing confusion
I did bump the version number but forgot to bump the SO version (you know, the thing that specifies API/ABI compatibility, and is independent from the software release version)
I made a small change but accidentally caused an API incompatibility without thinking (e.g. made something "const" that should have been all along, didn't realize it would break people's code)
I made a small change but accidentally caused an ABI incompatibility -- e.g., changed a constant in a header file, wasn't thinking and forgot that this would be "baked in" in software compiled against a previous version
I have done pretty much all of these things at some time or other in the past. Due to these previous mistakes, these days I probably spend more time testing than actually developing, and still end up making mistakes. The mistakes are often not that bad, after all people understand, mistakes happen, but they sometimes cause people to drop using the library, without even talking to me or communicating on the mailing list, which sucks -- if those people were so interested, it would be cool if they had helped test before I published a release -- but anyways, you get the idea.
So, rather than just compiling and running the unit tests, my testing process now involves some pretty extensive steps. In particularly, I am now using "apt-cache rdepends" to find software that uses my library, and I install it and switch the binary out to test for ABI compatibility. Then, I uninstall it, and "apt-get source" it, and compile it against the new version to test for API compatibility.
This kind of testing involves,
understanding other peoples software and figuring out where and how it exercises my code
compiling other peoples software, including figuring out their other dependencies and how to get everything working -- for large projects this can be a nightmare.
some projects using my software are actually plugins for other projects, meaning I have to additionally get the host program working
many projects using my library are GUI-oriented, so I have to navigate and learn some software I don't even know or use, and then guess when I have got it to a place where it is actually calling out to my library
my library works on Linux, Windows, and OS X, and often I don't have enough machines and operating systems around to test on. For example, a huge problem with my last release was a bug that only showed up in Linux on x86_64. I had tested on Linux i386, and OS X 64-bit, but somehow these platforms didn't show the bug, it was particular to the Linux-64-bit combination which I had neglected testing because I didn't have the right hardware and assumed I'd covered enough ground.
As you can imagine this is not a light task, and makes for huge delays before publishing a given release, delaying the dissemination of bugfixes, etc. The worst thing is that my project is not even a large library, and is a hobby project of mine, so all of this feels like huge overhead just for something I do in my spare time. I'd rather be developing features than just defending against my own potential mistakes for every little change I make. But, it currently has 42 rdepends listed in Ubuntu, to give you an idea, and I'm proud that it is useful to other people so I want to be able to develop and improve it without worrying so much about breaking things for everyone.
My question is, how can I improve the efficiency of this testing process? Are there for example any tools that will automatically compile "rdepends" packages against a new version of my library and give me a report? Or somehow download compiled binaries of rdepends and test loading them against my ABI without actually necessarily requiring me to navigate the GUI of some unknown software?
how can I improve the efficiency of this testing process?
The main problem is communication, apart the fact that you lack scripts that automate the process. You can do pre-releases of your packages, mailing the distributions that your library supports, etc. or instead of maintaining the packages yourself insert them into some mayor Distro and let some experimented maintainer do the stuff.
You can always break people stuff, just don't do it so frequently. Remember that people need stability in some certain sense so you may document very well each change so people using your library can't say you didn't tell them.
About tools... you should find your own pace. Maybe some buildbots (AFAIK some projects lend build bots), maybe script automatizing the process you build stuff, etc. etc. etc., did I said etc.? The problem is too broad and there are effectively too many solutions that makes any suggestion non-viable. You may want to check https://softwareengineering.stackexchange.com/q/150466/104338 as "some" methods but, again, you should find your own pace.

Is there an Objective-C Interpreter for the Mac? [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking us to recommend or find a tool, library or favorite off-site resource are off-topic for Stack Overflow as they tend to attract opinionated answers and spam. Instead, describe the problem and what has been done so far to solve it.
Closed 8 years ago.
Improve this question
Sometimes it's nice to open an interpreter, type out some code and see if it's working, rather than having to compile something large like an Xcode project just to quickly test something. Does an Objective-C Interpreter exist for the Mac, or am I out of luck?
UPDATE: There's a paid program in the App Store called CodeRunner, which lets you run Obj-C quickly (and several other languages). It's not an interpreter, but works pretty well for testing out ideas quickly: http://itunes.apple.com/us/app/coderunner/id433335799?mt=12
You can use F-Script, which is Smalltalk-based, but lets you interface with Cocoa. You can also embed it in your application, to let you inspect views and other things at runtime. It's quite useful. Edit: as pointed out in the comments, there are other great language bridges available, like PyObjC, RubyCocoa/MacRuby, Nu, etc. CINT is an example of a C interpreter, but not Obj-C.
As for an actual Objective-C interpreter, I don't think one really exists. But it's not too hard to set up a "Command Line Tool" project in Xcode, which gives you a really simple main.m file to try something in.
For those arriving here late: Take a look at Tosti. A basic but pretty functional Objective-C interpreter.
It's a side-project I put on GitHub as there seems very little available at the moment. I'm using it to do some remote debugging. Support available.
RubyMotion allows you to use all of the Cocoa SDK's library (as far as I know there are 0 limitations due to the similarities between Ruby & Objective C), for example, at runtime. You can also of course use every Objective C library you can load into it as well. The only limitations are the same as all other IDE's, namely those set forth by Apple with regard to unapproved dynamic libraries.
Anyway, functions are syntactically very, very similar to Objective-C, in it surprised me that you can do this in such a way with ruby (normally you can't
#for example the in AppDelegate class
class AppDelegate
def application(application, didFinishLaunchingWithOptions:launchOptions)
#...
true
end
end
when you run rake (equivalent to Build command in XCode), you of course do it from the console, and once your iPhone/iPad app is loaded to the simulator or your apple device, you then can control that device or simulator interactively via commands entered from the console.
Ruby Motion costs $200 bucks/year, so its not worth it just for the interactive shell feature though of course

Do you program in Linux and document in Windows? [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 4 years ago.
Improve this question
Most offices today use Microsoft Office for documentation and presentation. Lots of programmers prefer to work and develop under Linux. When your shop uses both, how do you do your development in Linux and documentation in Windows and stay productive?
I would just do the documentation in Linux too. MS Office can be run using some Wine derivative (or so I'm told), but I would rather use OpenOffice.org for such documents.
If you absolutely have to use Windows, you can boot a virtual machine (using e.g. VirtualBox) and do the dirty work while still having access to your preferred environment.
The teams I've been with always write documentation in Linux. POD makes it very easy to write tolerable-looking man pages, and higher-level ("glossy") documentation can be done with simple tools (HTML), moderate-complexity tools (markdown) or with very complex tools (LaTeX).
To each their own, but I'd avoid the Office and OpenOffice tools like a skunk, because they play so poorly with git, svn, cvs, etc. (diff, blame, merge, etc., just don't work with a big binary pile of data.)
There are two options that I've seen used.
(1) Use web-based documentation. Examples include Google Docs or a wiki. As long as you have a web browser, you can view and edit the documentation.
(2) Use a cross-platform office suite. I have OpenOffice.org installed on Linux and it can open Microsoft Office file formats, including the new .*X format. The only thing that you need to do is to make sure that you open it in a Microsoft product later to make sure the formatting is still good.
But everyplace that I've personally worked performed cross-platform development. In these cases, the development machines were typically Windows boxes and the developers either ran Linux VMs or SSH'ed into a Linux server to test their work on the deployment environment.
Steve Streeting wrote an interesting blog post about his technical documentation tool chain with the following requirements:
Lets the author concentrate on content rather than style
Generates multiple formats from one source (HTML, PDF, man pages, HTML Help etc)
Does all the tedious work for you such as TOCs, cross-references, source code highlighting, footnotes
Is friendly to source control systems & diffs in general
Standard enough that you could submit the content to a publisher if you wanted to
Preferably cross-platform, standards-based and not oriented to any particular language or technology

Best Fortran IDE [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking us to recommend or find a book, tool, software library, tutorial or other off-site resource are off-topic for Stack Overflow as they tend to attract opinionated answers and spam. Instead, describe the problem and what has been done so far to solve it.
Closed 8 years ago.
Improve this question
Is there anybody using Fortran on stackoverflow? What IDE do you use and which one do you think to be the best?
Seems lots of people surround me are quite inconvenient with Intel Visual Fortran. Because there is no support for intellisense, refactoring, etc.
What about these ones:
Photran - An Integrated Development Environment and Refactoring Tool for Fortran (this one is everything you need :D)
Oracle Solaris Studio Advanced C, C++ and Fortran development platform
Well, as others already mentioned you could use instead of an IDE a separate text editor. Several come to mind;
VIM (or one of the family) - great editing capabilities, very customizable. Unfortunatelly, it is still an editor
not an IDE. It can be customized in a variety of ways of course, but that gets boring after a while. Also, it's syntax highlighting capabilities are somewhat wrongly made. Also has some problems/confusions with free/fixed format and f77/f90/f95 ...
Emacs - pretty much same advantages/shortcomings as the above.
SlickEdit - has very nice fortran support; unfortunatelly, modifying it is a little annoying and the support forums are not much help.
In general, editors like the above mentioned can be used, but in that case it is best to choose one from the start and stick to it; modifying your work habits as you go; since customizing everything can be time consuming to suit your needs.
Most editors have problems with fortran's syntax, since they're used to C's (where everything that "opens" has a "close").
As far as IDE's goes, your options are not that great:
Silverfrost's compiler used to come with it's own IDE (Plato, if I do remember correctly; it's been a while) - don't know what happened to it, and whether it still is "alive"
Absoft has one of it's own as well (never used it so ...)
There was a specialized fortran editor I once encountered; ya...something; unfortunatelly I cannot remember it's name; maybe someone else will know
One of the best options (which I used to use myself, so I may be biased) is Visual Studio + Resharper, which will add a few editing features to VS's editor. Most of them can also be accomplished with macros.
This post could use some editing but it is written in a hurry, so ...
Geany is nice too. I use it for my small projects in Fortran. Works pretty good too.
http://www.geany.org/
I've never used it, but according to the documentation, the NetBeans C/C++ plugin also adds support for Fortran. I use NetBeans as my IDE for everything except .NET development and love it. If Fortran support is half as good as support for C, C++, Java, Python, Ruby, and PHP, then it is worth looking at.
Many Fortran developers use text editors plus some build automation tool like CMake or SCons. Partially because of lack of well-featured IDE.
However there are some projects. I've tried Photran, Fortran IDE for Eclipse. It has limited support for autocomplete and refactoring.
Also take a look at Code::Blocks IDE for Fortran. I do not like Code::Blocks...
We use an in-house extension to visual studio to get code completion for our fortran code and to assist us with debugging. But even so there is a lot of room for improvement. Our main issues are:
instability of visual studio. An error in the debugged program can crash VS.
sometimes VS shows corrupted stacktraces (while WinDBG shows it correctly).
debugger wont show values of variables of type CHARACTER(LEN=:), ALLOCATABLE
Edit and Continue not supported
We used Sun workshop and it was very good, but there is no windows version.
jedit has a nice fortran mode and you can define keybindings for the compiler and debugger.
for small to medium sized projects it is quite nice. it also has svn and multiple files search. also very nice is hypersearch where you get a list of you matches and you can go to the position with a single click. another goodie is a plugin for gdb and for ctags. you can very easily script all functions using jython. it feels a little bit like a modern version of emacs that uses python instead of lisp. check out the plugin manager. it lets you download all the plugins from the server and installs them for you (like in eclipse).
http://www.jedit.org

PDF creation software available? [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking us to recommend or find a tool, library or favorite off-site resource are off-topic for Stack Overflow as they tend to attract opinionated answers and spam. Instead, describe the problem and what has been done so far to solve it.
Closed 9 years ago.
Improve this question
I'm investigating the possiblity of creating PDF files from an embedded system, specifially an ARM9 using the IAR tools. Open-souce or licensing is fine - I'm finding it difficult to search for online, and I'm hoping someone here has used a package. C or C++ is preferred, we will be creating fairly simple reports with only a little text and graphics.
UPDATE: By searching SO, I did find PDFTron - anyone have any experience with it? Seems like it might do what we want.
!!!
(is this a webserver? Otherwise it seems like it would make more sense to spit out text files as reports and convert on a PC.)
No experience, but maybe libHaru ? Wikipedia has a list of PDF software.
Look at iText - I've used that before and it works well.
(It is Java-based, but you said "C or C++ is preferred", not required)
How large is the system you're targeting? If you can afford to run a Python interpreter and a copy of Inkscape (no X needed), there's a great toolchain available.
Last time I faced the kind of problem space you're in, I used Inkscape to render SVG to PDF in non-GUI mode, as follows:
inkscape --without-gui --export-pdf=foo.pdf foo.svg
...where the SVG is built using template substitution. (In doing this in the past, I used the Genshi template language for building the templates, which happens to interoperate wonderfully with Inkscape's GUI functionality -- Inkscape-the-GUI-SVG-editor doesn't remove tags in namespaces it doesn't recognize, so you can edit a SVG template in Inkscape even after marking it up to work as a Genshi template!)
My use case was automatic generation of cover pages for outgoing fax jobs; a complete set of scripts implementing this method for HylaFAX+ is available in the mailing list archive here.