| Syslinux LUA User Guide |
| ======================= |
| Marcel Ritter <[email protected]> |
| |
| Invocation |
| ---------- |
| |
| Running +lua.c32+ only results in an interactive shell. |
| ...................................................... |
| KERNEL lua.c32 |
| ...................................................... |
| |
| By using the +APPEND+ parameter you can specify a lua |
| script to be executed: |
| ...................................................... |
| KERNEL lua.c32 |
| APPEND /testit.lua |
| ...................................................... |
| |
| Modules |
| ------- |
| |
| Modules must be explicitly loaded into the namespace |
| before use, for example: |
| ...................................................... |
| syslinux = require ("syslinux") |
| ...................................................... |
| |
| SYSLINUX |
| ~~~~~~~~ |
| |
| .syslinux.version() |
| |
| Returns version string |
| |
| .syslinux.derivative() |
| |
| Returns running Syslinux's derivative (ISOLINUX, PXELINUX or SYSLINUX). |
| See com32/lua/test/syslinux-derivative.lua for an example. |
| |
| .syslinux.sleep(s) |
| |
| Sleep for +s+ seconds |
| |
| .syslinux.msleep(ms) |
| |
| Sleep for +ms+ milliseconds |
| |
| .run_command(command) |
| |
| Execute syslinux command line +command+. |
| |
| _Example_: |
| ...................................................... |
| syslinux.run_command("memdisk initrd=/dos/BIOS/FSC-P7935-108.img raw") |
| ...................................................... |
| |
| .run_default() |
| |
| FIXME |
| |
| .local_boot() |
| |
| FIXME |
| |
| .final_cleanup() |
| |
| FIXME |
| |
| .boot_linux(kernel, cmdline, [mem_limit], [videomode]) |
| |
| FIXME |
| |
| .run_kernel_image(kernel, cmdline, ipappend_flags, type) |
| |
| FIXME |
| |
| .loadfile(filname) |
| |
| Load file +filename+ (via TFTP) |
| |
| .filesize(file) |
| |
| Return size of +file+ (loaded by loadfile()) |
| |
| .filename(file) |
| |
| Return name of +file+ (loaded by loadfile()) |
| |
| .in itramfs_init() |
| |
| Return empty initramfs object |
| |
| .initramfs_load_archive(initramfs, filename) |
| |
| Load contents of +filename+ into +initramfs+. Initialize |
| +initramfs+ with initramfs_init() before use. |
| |
| .initramfs_add_file(initramfs, file) |
| |
| Adds +file+ to +initramfs+. +initramfs+ needs to be |
| initialized, +file+ has been loaded by loadfile(). |
| |
| _Example_: |
| ...................................................... |
| -- get nice output |
| printf = function(s,...) |
| return io.write(s:format(...)) |
| end -- function |
| |
| kernel = syslinux.loadfile("/SuSE-11.1/x86_64/linux") |
| |
| printf("Filename/size: %s %d\n", syslinux.filename(kernel), syslinux.filesize(kernel)) |
| |
| initrd = syslinux.loadfile("/SuSE-11.1/x86_64/initrd") |
| |
| printf("Filename/size: %s %d\n", syslinux.filename(initrd), syslinux.filesize(initrd)) |
| |
| initrd = syslinux.initramfs_init() |
| syslinux.initramfs_load_archive(initrd, "/SuSE-11.1/x86_64/initrd"); |
| |
| syslinux.boot_it(kernel, initrd, "init=/bin/bash") |
| |
| syslinux.sleep(20) |
| |
| ...................................................... |
| |
| |
| |
| DMI |
| ~~~ |
| |
| .dmi_supported() |
| |
| Returns +true+ if DMI is supported on machine, +false+ otherwise. |
| |
| .dmi_gettable() |
| |
| Returns a list if key-value pairs. The key is one of the DMI property strings: |
| FIXME list |
| |
| _Example_: |
| ...................................................... |
| if (dmi.supported()) then |
| |
| dmitable = dmi.gettable() |
| |
| for k,v in pairs(dmitable) do |
| print(k, v) |
| end |
| |
| print(dmitable["system.manufacturer"]) |
| print(dmitable["system.product_name"]) |
| print(dmitable["bios.bios_revision"]) |
| |
| if ( string.match(dmitable["system.product_name"], "ESPRIMO P7935") ) then |
| print("Matches") |
| syslinux.run_command("memdisk initrd=/dos/BIOS/FSC-P7935-108.img raw") |
| else |
| print("Does not match") |
| syslinux.run_command("memdisk initrd=/dos/BIOS/FSC-P7935-108.img raw") |
| end |
| |
| end |
| |
| ...................................................... |
| |
| |
| PCI |
| ~~~ |
| |
| .pci_getinfo() |
| |
| Return list of value pairs (device_index, device) of all PCI devices. |
| |
| .pci_getidlist(filename) |
| |
| Load a tab separated list of PCI IDs and their description. |
| Sample files can be found here: http://pciids.sourceforge.net/ |
| |
| |
| _Example_: |
| ...................................................... |
| -- get nice output |
| printf = function(s,...) |
| return io.write(s:format(...)) |
| end |
| |
| -- get device info |
| pciinfo = pci.getinfo() |
| |
| -- get plain text device description |
| pciids = pci.getidlist("/pci.ids") |
| |
| -- list all pci busses |
| for dind,device in pairs(pciinfo) do |
| |
| -- search for device description |
| search = string.format("%04x%04x", device['vendor'], device['product']) |
| |
| printf(" %04x:%04x:%04x:%04x = ", device['vendor'], device['product'], |
| device['sub_vendor'], device['sub_product']) |
| |
| if ( pciids[search] ) then |
| printf("%s\n", pciids[search]) |
| else |
| printf("Unknown\n") |
| end |
| end |
| |
| -- print(pciids["8086"]) |
| -- print(pciids["10543009"]) |
| -- print(pciids["00700003"]) |
| -- print(pciids["0070e817"]) |
| -- print(pciids["1002437a1002437a"]) |
| ...................................................... |
| |
| |
| VESA |
| ~~~~ |
| |
| .getmodes() |
| |
| Return list of available VESA modes. |
| |
| _Example_: |
| ...................................................... |
| -- get nice output |
| printf = function(s,...) |
| return io.write(s:format(...)) |
| end |
| |
| -- list available vesa modes |
| -- only one supported right now, not of much use |
| modes = vesa.getmodes() |
| |
| for mind,mode in pairs(modes) do |
| printf("%04x: %dx%dx%d\n", mode['mode'], mode['hres'], mode['vres'], mode['bpp']) |
| end |
| ...................................................... |
| |
| |
| .setmode() |
| |
| Set (only currently supported) VESA mode. |
| |
| .load_background(filename) |
| |
| Load +filename+ from TFTP, and use it as background image. |
| |
| _Example_: |
| ...................................................... |
| -- get nice output |
| printf = function(s,...) |
| return io.write(s:format(...)) |
| end |
| |
| -- lets go to graphics land |
| vesa.setmode() |
| |
| printf("Hello World! - VESA mode") |
| |
| -- some text to display "typing style" |
| textline=[[ |
| From syslinux GSOC 2009 home page: |
| |
| Finish the Lua engine |
| |
| We already have a Lua interpreter integrated with the Syslinux build. However, right now it is not very useful. We need to create a set of bindings to the Syslinux functionality, and have an array of documentation and examples so users can use them. |
| |
| This is not a documentation project, but the documentation deliverable will be particularly important for this one, since the intended target is system administrators, not developers. |
| ]] |
| |
| |
| -- do display loop |
| -- keep in mind: background change will not erase text! |
| while ( true ) do |
| |
| vesa.load_background("/background1.jpg") |
| |
| syslinux.sleep(1) |
| |
| for i = 1, #textline do |
| local c = textline:sub(i,i) |
| printf("%s", c) |
| syslinux.msleep(200) |
| end |
| |
| syslinux.sleep(10) |
| |
| ...................................................... |
| |