Understanding Development Workflow Print

 

This note explains how to develop new Linux functionality for your specific application. The text below walks you through the recommended development workflow. Various application notes available from the site illustrate how to use that workflow to enable specific functionalities on the target.

The recommended development workflow is as follows.

On the development host, go to the top of the installation tree and activate the cross-development environment:

-bash-4.2$ .  ./ACTIVATE.sh
-bash-4.2$ echo $MCU
STM32F7DISCO
-bash-4.2$

Select the project you would like to start your development from. For instance, if you need Ethernet and TCP/IP in your application, the networking project may be a reasonable choice for you. There are other sample projects included in the distribution and/or made available from the Emcraft web site.

In the session below, we use networking as a starting point for the development. Go to the project directory and clone the project so that you can update the new project without making changes to the existing project that you use as a reference. Here is how we create a clone of networking, calling the clone networking_plus:

-bash-4.2$ cd projects/networking
-bash-4.2$ make clone new=networking_plus
New project created in /home/vlad/test/linux-cortexm-1.14.1/projects/networking_plus
-bash-4.2$

Go to the newly created project directory and build it. If your have cloned project from a known-to-work reference project, the new project should build as well since so far you have made no udpates to the new project:

-bash-4.2$ make
...
-bash-4.2$ ls -lt networking_plus.uImage
-rw-r--r-- 1 vlad vlad 1708896 2015-06-26 15:32 networking_plus.uImage
-bash-4.2$

At this point, it is probably a good idea to validate that the newly built project actually runs on the target as expected. Refer to Loading Linux images via Ethernet and TFTP for detailed instructions on how to load an uImage to the target.

At this point you are ready to start development of your custom functinality. You will be doing one or more of the following things:

  1. Update the kernel configuration. Run make kmenuconfig and then browse through the kernel configuration GUI to enable / disable whatever kernel build-time options that affect your application:
  2. -bash-4.2$ make kmenuconfig

    Having updated the kernel config, build the project, load it to the target and validate that it still boots. Enabling or disabling even a single kernel config option can easily break your target functionality.

  3. Update the busybox configuration. Typically, you would do that to add new busybox applets to your root file system. Run make bmenuconfig and then browse through the busybox configuration GUI to enable / disable whatever applets you need (or don't need) in your application:
  4. -bash-4.2$ make bmenuconfig

  5. Modify the root file system spec file. Simply open the spec file in your favorite text editor and update it as appopriate for your application:
  6. -bash-4.2$ vi networking_plus.initramfs

    Things that you would typically do are as follows:

  • Add a busybox applet to the root file system:
  • ...
    slink /bin/dd busybox 777 0 0
    ...

  • Add a device node to the root file system:
  • ...
    nod /dev/mtdblock3 0600 0 0 b 31 3
    ...

  • Add your application binaries (and or files) to the root file system:
  • ...
    file /bin/my_app ${INSTALL_ROOT}/projects/${SAMPLE}/app/my_app 755 0 0
    ...

Refer to Building user-space applications and related application notes for information on how to build user applications for the target.

Additional information of the Linux development workflow is documented in Section 6 of the Linux Cortex-M User's Manual.