Select Page

Embedded Linux Assignments

Assignment 1. Linux build

Build an embedded system Linux from the source code.
Steps involved in this exercise:

  1. Download U-boot source code and build MLO and U-boot images.
    1. Download kernel source code.
    2. Configure with the default configuration.
    3. Build kernel image and modules.
    4. If there the above steps are combined in a shell script, break them down and execute the steps separately.
  2. (execute one step at a time)
    1. Download a prebuilt rootfs.
    2. Download a source distribution.
    3. Build minimalistic rootfs using busybox.
  3. Place all these on an SD card and boot the system.
  4. (try this): NFS mount your project folder on the target, so that you can execute applications directly from the host computer without having to copy on the SD card.
  5. Write a hello world application and execute.
  6. Trace all the executables that execute till your application is executed. Do so by printing a greeting message in the following programs: U-boot, vmlinux kernel, init, bash and finally your application.

Assignment 2. System call

  • Enhance Linux kernel to add the following two system calls: sys_hello and sys_led, and write an application demonstrating its use.
  • sys_hello: prints a greetings message.
  • sys_led: turns on/off one of the LEDs on the board. The argument should specify OFF, ON or TOGGLE. If there are multiple LEDs, you may provide LED number as the second argument.

List of topics for presentation

Here is a list of possible topics. Some topics are more involved than others – use your discretion to decide the amount of information to cover in the specified time. (Each presentation may be 20-30 minutes; we will decide the exact time during the next class.)

1. Android architecture

Focus should be on how a Linux system is enhanced to make it an android system and not so much about feature details of android. The presentations should address aspects like changes in the kernel (if any), restructure of rootfs, layered architecture (native / Java services and application layer).

2. Multiprocessor support in Linux

Talk may address the following aspects: booting up, scheduling, interrupt distribution, handling shared memory.

3. Power management

Power modes, placing processor, memory and IO devices into various power states. This should be explained with an example implementation with one or two device drivers.

4. Virtualization

What is a virtual machine? What hardware/software support is required? How is VM implemented?

5. Realtime scheduler

What makes Linux non-realtime? How does the realtime scheduler address these limitations? Provide example(s) of applications that can be implemented with the realtime scheduler.

6. Version history of Linux

How has the Linux kernel evolved over the years? What are significant landmark versions?

7. Distributions

What are various distributions for embedded systems? (Angstrom, yocto, debian etc.) Provide details of one example distribution.

8. Other topics

Here are some additional topics which you may want to explore and suggest the content:

  1. Secure boot, kernel security
  2. Fuse: file system in user space
  3. sysfs file system
  4. Device tree blob